Como hay mucha confusión sobre las consultas de la colección MongoDB con subdocumentos , pensé que valía la pena explicar las respuestas anteriores con ejemplos:
Primero, he insertado solo dos objetos en la colección, a saber: message
como:
> db.messages.find().pretty()
{
"_id" : ObjectId("5cce8e417d2e7b3fe9c93c32"),
"headers" : {
"From" : "reservations@marriott.com"
}
}
{
"_id" : ObjectId("5cce8eb97d2e7b3fe9c93c33"),
"headers" : {
"From" : "reservations@marriott.com",
"To" : "kprasad.iitd@gmail.com"
}
}
>
Entonces, ¿cuál es el resultado de la consulta: db.messages.find({headers: {From: "reservations@marriott.com"} }).count()
Debería ser uno porque estas consultas para documentos eran headers
iguales al objeto {From: "reservations@marriott.com"}
, es decir, no contiene otros campos o deberíamos especificar el subdocumento completo como el valor de un campo.
Entonces, según la respuesta de @ Edmondo1984
La igualdad coincide dentro de los subdocumentos seleccione documentos si el subdocumento coincide exactamente con el subdocumento especificado, incluido el orden de los campos .
De las declaraciones anteriores, ¿cuál debería ser el resultado de la consulta a continuación?
> db.messages.find({headers: {To: "kprasad.iitd@gmail.com", From: "reservations@marriott.com"} }).count()
0
¿Y qué pasa si cambiamos el orden From
y, To
es decir, lo mismo que los subdocumentos de los segundos documentos?
> db.messages.find({headers: {From: "reservations@marriott.com", To: "kprasad.iitd@gmail.com"} }).count()
1
por lo tanto, coincide exactamente con el subdocumento especificado, incluido el orden de los campos .
Para usar el operador de punto, creo que es muy claro para todos. Veamos el resultado de la consulta a continuación:
> db.messages.find( { 'headers.From': "reservations@marriott.com" } ).count()
2
Espero que estas explicaciones con el ejemplo anterior hagan que alguien sea más claro al buscar consultas con subdocumentos .