Ejemplo de findOne en MongoDB

MongoDB findOne() método devuelve solo un documento que cumple con el criterio ingresado. Si el criterio ingresado coincide con más de un documento, el método devuelve solo un documento según el orden natural, que refleja el orden en que los documentos se almacenan en la base de datos.

MongoDB findOne

La sintaxis de MongoDB findOne() es: db.collection.findOne(<criterio>, <proyección>) criterio – especifica el criterio de selección ingresado. proyección – especifica la lista de campos que se mostrarán en el documento devuelto. Algunos puntos importantes sobre MongoDB findOne:

  1. El parámetro de proyección acepta los valores booleanos 1 o true, 0 o false. Si los campos de proyección no están especificados, se recuperarán todos los campos.
  2. MongoDB findOne() siempre incluye el campo _id aunque no se especifique explícitamente en el parámetro de proyección a menos que se excluya.
  3. MongoDB findOne() devuelve solo un documento pero no un cursor.

Consulta vacía de findOne de MongoDB – Especificación vacía de consulta

Esta operación devuelve un único documento de la colección especificada. Por ejemplo, db.car.findOne() Salida:

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

Solo se recupera un registro de la colección car. Tenga en cuenta que “Polo” fue insertado primero en la base de datos.

Consulta de findOne de MongoDB – Especificación de consulta

Esta operación de findOne de MongoDB devuelve el primer documento que coincida con la consulta especificada de la colección junto con los criterios de selección ingresados. Por ejemplo:

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

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

Esta operación busca el automóvil llamado “Zen” o con una velocidad superior a 60 y recupera el primer documento que cumpla con los criterios ingresados de la colección de automóviles.

Proyección en findOne() de MongoDB

El parámetro de proyección también es aplicable para el método findOne de MongoDB. Veamos algunos escenarios en los que podemos usar la proyección en findOne.

MongoDB findOne: especificar los campos a devolver

Esta operación muestra solo los campos especificados en la consulta. Por ejemplo:

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

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

Se muestran el primer documento de la colección Car con los campos id, nombre y color.

MongoDB findOne: devolver todos los campos excepto el excluido

Esta operación recupera el primer documento excluyendo los campos especificados en los criterios de selección. Por ejemplo;

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

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

Se recupera el nombre del automóvil con Volkswagen, excluyendo los campos id, mfdcountry y cno.

Documento de resultado de MongoDB findOne

Los métodos del cursor no funcionarán en esta operación, ya que el método devuelve solo un documento. Para imprimir los valores individuales de los campos del documento, podemos usar el siguiente código.

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

"Polo"

Esto recupera solo el nombre del automóvil “Polo”.

Ejemplo de findOne de MongoDB en Java

A continuación se muestra el programa Java que muestra diferentes opciones que podemos usar con findOne() de 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 {

	// El método recupera el primer documento sin ningún criterio
	public static void emptyFindOne() throws UnknownHostException {

		// Obtén una nueva conexión a la base de datos asumiendo que está en ejecución
		MongoClient mongoClient = new MongoClient("localhost");

		// Utiliza "test" como base de datos, utiliza tu base de datos aquí
		DB db = mongoClient.getDB("test");

		// Obtiene el objeto de la colección, se utiliza "car" aquí, utiliza el tuyo propio
		DBCollection coll = db.getCollection("car");

		// Invoca el método findOne()
		DBObject doc = coll.findOne();

		// Imprime el documento resultante
		System.out.println(doc);
	}

	// Método que recupera el documento basado en criterios de selección
	public static void querySpecification() throws UnknownHostException {
		// No es necesario obtener una conexión cada vez (se podría hacer una vez)
		// globally).
		MongoClient mongoClient = new MongoClient("localhost");
		DB db = mongoClient.getDB("test");
		DBCollection coll = db.getCollection("car");

		// Consulta para filtrar el documento basado en valores de nombre y velocidad mediante
		// la creación de un nuevo objeto
		DBObject query = new BasicDBObject("name", "Zen").append("speed",
				new BasicDBObject("$gt", 30));

		// Documento resultante recuperado al satisfacer los criterios
		DBObject d1 = coll.findOne(query);

		// Imprime el documento en la consola
		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");

		// Crea un nuevo objeto de base de datos
		BasicDBObject b1 = new BasicDBObject();

		// Criterios para mostrar solo los campos de nombre y color en el resultado
		// document
		BasicDBObject fields = new BasicDBObject("name", 1).append("color", 1);

		// Método que recupera los documentos aceptando campos y objeto de criterio
		// 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");

		// Criterio de filtro para el nombre del automóvil "volkswagen"
		DBObject query = new BasicDBObject("name", "Volkswagen");

		// Excluyendo los campos mfdcountry, cno e 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();
		
		// Imprime solo el nombre del automóvil
		System.out.println((d1.get("name")));
	}
	
	public static void main(String[] args) throws UnknownHostException {
		// Invocando todos los métodos desde el principal
		emptyFindOne();
		querySpecification();
		projectionFields();
		excludeByfields();
		printDoc();
	}

}

La salida del programa anterior es:

{ "_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

Eso es todo para el método findOne() de MongoDB, investigaremos más opciones de MongoDB en próximas publicaciones. Referencia: Documento Oficial

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