Saltar al contenido

Los métodos find () y findOne () en MongoDB muestran resultados diferentes

Solución:

En primer lugar, la diferencia básica entre findOne() y find():

  • findOne() – si la consulta coincide, se devuelve el primer documento; de lo contrario, es nulo.

  • find() – sin importar el número de documentos que coincidan, se devuelve un cursor, nunca nulo.

Entonces, cuando se pone en una condición if, findOne() se puede convertir a falso cuando no coincide con ningún documento. Como find devuelve un objeto de cursor y nunca devuelve nulo, se convertirá en verdadero cuando se ponga en una condición if.

find y findOne() devuelve lo siguiente para una colección vacía:

ingrese la descripción de la imagen aquí

La trampa en la que se encuentra es la conversión bastante indocumentada de objetos mongo shell a booleanos en javascript:

Encuentra uno() devuelve un documento, o nulo / nulo / como se llame

encontrar() devuelve un cursor, que puede estar vacío. Pero el objeto devuelto siempre está definido.

La la find() el método devuelve un cursor que es siempre truthy incluso si los criterios de consulta no coinciden con ningún documento.

Por otro lado, el findOne devuelve el primer documento que coincida con sus criterios de consulta o null (JavaScript o el equivalente en su controlador de idioma) si no hay ningún documento que coincida con los criterios especificados.

> db.dropDatabase()
{ "dropped" : "test", "ok" : 1 }
> var cursor = db.collection.find();
> cursor;
> typeof cursor;
object
> !cursor;
false
> var document = db.collection.findOne();
> document;
null
> typeof document;
object
> !document;
true
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *