Пример findOne в MongoDB

Метод findOne() в MongoDB возвращает только один документ, удовлетворяющий введенным критериям. Если критерии соответствуют более чем одному документу, метод возвращает только один документ в соответствии с естественным порядком, который отражает порядок хранения документов в базе данных.

Метод findOne в MongoDB

Синтаксис метода findOne(): db.collection.findOne(<критерии>, <проекция>) критерии – указывает критерии выбора. проекция – указывает список полей, которые должны быть отображены в возвращаемом документе. Несколько важных моментов о методе findOne в MongoDB:

  1. Параметр проекции принимает булевые значения 1 или true, 0 или false. Если поля проекции не указаны, будут извлечены все поля.
  2. Метод findOne в MongoDB всегда включает поле _id, даже если оно не указано явно в параметре проекции, если оно не исключено.
  3. Метод findOne в MongoDB возвращает только документ, а не курсор.

MongoDB findOne – Пустая спецификация запроса

Эта операция возвращает один документ из указанной коллекции. Например, db.car.findOne() Вывод:

{
"_id" : 2,
"name" : "Polo", "color" : "White",
"cno" : "H411", "speed" : 45, "mfdcountry" : "Japan"
}

Только одна запись из коллекции car извлекается. Обратите внимание, что “Polo” был вставлен первым в базу данных.

MongoDB findOne – Спецификация запроса

Эта операция MongoDB findOne возвращает первый соответствующий документ из указанной коллекции вместе с введенными критериями выбора. Например:

>db.car.findOne(
... {
... $or:[
... {name:"Zen"},
... {speed: {$gt:60}} ... ]
... }
... )

{
"_id" : ObjectId("546cb92393f464ed49d620db"), 
"name" : "Zen",
"color" : "JetRed",
"cno" : "H671",
"speed" : 67, 
"mfdcountry" : "Rome"
}

Эта операция ищет автомобиль с названием “Zen” или скоростью больше 60 и извлекает первый документ, удовлетворяющий введенным критериям, из коллекции автомобилей.

Проекция в MongoDB findOne()

Параметр проекции также применим к методу MongoDB findOne. Давайте рассмотрим некоторые сценарии, в которых мы можем использовать проекцию в findOne.

findOne в MongoDB – указание полей для возврата

Эта операция отображает только поля, указанные в запросе. Например:

>db.car.findOne(
... { },
... {name:1,color:1}
... )

{ "_id" : 2, "name" : "Polo", "color" : "White" }

Отображаются поля первого документа из коллекции Car с id, name и color.

findOne в MongoDB – возврат всех полей, кроме исключенного

Эта операция извлекает первый документ, исключая поля, указанные в критериях выборки. Например;

>db.car.findOne(
... { name:"Volkswagen" },
... {_id:0, mfdcountry:0,cno:0 }
... )

{ "name" : "Volkswagen", "color" : "JetBlue", "speed" : 62 }

Извлекается название автомобиля с Volkswagen, исключая поля id, mfdcountry и cno.

Результат документа findOne в MongoDB

Методы курсора не будут работать в этой операции, так как метод возвращает только один документ. Для вывода значений отдельных полей из документа мы можем использовать следующий код.

>var car = db.car.findOne(); 
> if (car) {
...  var carName = car.name;
...  print (tojson(carName));
... }

"Polo"

Это извлекает только название автомобиля “Polo”.

Пример Java MongoDB findOne

Ниже приведена программа на java, показывающая различные варианты использования метода findOne() в MongoDB. MongoDBFindOne.java

package com.journaldev.mongodb;

import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;

import java.net.UnknownHostException;

public class MongoDBFindOne {

	// Метод извлекает первый документ без каких-либо критериев
	public static void emptyFindOne() throws UnknownHostException {

		// Получить новое соединение с базой данных, предполагается, что она запущена
		MongoClient mongoClient = new MongoClient("localhost");

		// Используйте test в качестве базы данных, здесь используйте вашу базу данных
		DB db = mongoClient.getDB("test");

		// Получить объект коллекции, здесь используется car, используйте свой собственный
		DBCollection coll = db.getCollection("car");

		// Вызов метода findOne()
		DBObject doc = coll.findOne();

		// Печатает результатный документ
		System.out.println(doc);
	}

	// Метод, извлекающий документ на основе критериев выборки
	public static void querySpecification() throws UnknownHostException {
		// Подключение каждый раз не требуется (можно сделать один раз
		// globally).
		MongoClient mongoClient = new MongoClient("localhost");
		DB db = mongoClient.getDB("test");
		DBCollection coll = db.getCollection("car");

		// Запрос для фильтрации документа на основе значений имени и скорости путем
		// создания нового объекта
		DBObject query = new BasicDBObject("name", "Zen").append("speed",
				new BasicDBObject("$gt", 30));

		// Результирующий документ извлекается путем удовлетворения критериев
		DBObject d1 = coll.findOne(query);

		// Печатает документ на консоль
		System.out.println(d1);
	}

	public static void projectionFields() throws UnknownHostException {

		MongoClient mongoClient = new MongoClient("localhost");
		DB db = mongoClient.getDB("test");
		DBCollection coll = db.getCollection("car");

		// Создает новый объект db
		BasicDBObject b1 = new BasicDBObject();

		// Критерии для отображения только полей имени и цвета в результатном
		// document
		BasicDBObject fields = new BasicDBObject("name", 1).append("color", 1);

		// Метод, извлекающий документы, принимая поля и объект
		// criteria
		DBObject d1 = coll.findOne(b1, fields);

		System.out.println(d1);

	}

	public static void excludeByfields() throws UnknownHostException {
		MongoClient m1 = new MongoClient("localhost");

		DB db = m1.getDB("test");
		DBCollection col = db.getCollection("car");

		// Критерии фильтрации для имени автомобиля volkswagen
		DBObject query = new BasicDBObject("name", "Volkswagen");

		// Исключение полей mfdcountry, cno и id
		BasicDBObject fields = new BasicDBObject("mfdcountry", 0).append("cno",
				0).append("_id", 0);

		DBObject d1 = col.findOne(query, fields);
		System.out.println(d1);
	}

	public static void printDoc() throws UnknownHostException {
		MongoClient m1 = new MongoClient("localhost");
		DB db = m1.getDB("test");
		DBCollection col = db.getCollection("car");
		
		DBObject d1 = col.findOne();
		
		// Печатает только имя автомобиля
		System.out.println((d1.get("name")));
	}
	
	public static void main(String[] args) throws UnknownHostException {
		// Вызов всех методов из main
		emptyFindOne();
		querySpecification();
		projectionFields();
		excludeByfields();
		printDoc();
	}

}

Вывод вышеуказанной программы:

{ "_id" : 2.0 , "name" : "Polo" , "color" : "White" , "cno" : "H411" , "speed" : 45.0 , "mfdcountry" : "Japan"} ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
{ "_id" : { "$oid" : "546cb92393f464ed49d620db"} , "name" : "Zen" , "color" : "JetRed" , "cno" : "H671" , "speed" : 67 , "mfdcountry" : "Rome"}
{ "_id" : 2.0 , "name" : "Polo" , "color" : "White"}
{ "name" : "Volkswagen" , "color" : "JetBlue" , "speed" : 62}
Polo

Вот и всё, что касается метода findOne() в MongoDB. Мы рассмотрим больше вариантов MongoDB в следующих сообщениях. Ссылка: Официальная документация

Source:
https://www.digitalocean.com/community/tutorials/mongodb-findone-example