Tengo un problema al consultar mongoDB con notación de objetos anidados:
db.messages.find( { headers : { From: "[email protected]" } } ).count()
0
db.messages.find( { 'headers.From': "[email protected]" } ).count()
5
No puedo ver lo que estoy haciendo mal. Espero que la notación de objetos anidados devuelva el mismo resultado que la consulta de notación de puntos. Donde me equivoco
conditions['some.path'] = 'value'
en mi lógica de negocios, luego ejecuto una sola consulta al final:find(conditions, fields, callback);
domains.domain.com
. ¿Hay alguna solución para este escenario (sin alterar el dominio.com a otra cosa, por ejemplo, dominio_com)?Los dos mecanismos de consulta funcionan de diferentes maneras, como se sugiere en los documentos en la sección Subdocumentos :
Cuando el campo contiene un documento incrustado (es decir, subdocumento ), puede especificar todo el subdocumento como el valor de un campo, o "alcanzar" el subdocumento utilizando la notación de puntos, para especificar valores para campos individuales en el subdocumento :
La igualdad coincide con los subdocumentos para seleccionar documentos si el subdocumento coincide exactamente con el subdocumento especificado, incluido el orden de los campos.
En el siguiente ejemplo, la consulta coincide con todos los documentos donde el valor del productor de campo es un subdocumento que contiene solo el campo
company
con el valor'ABC123'
y el campoaddress
con el valor'123 Street'
, en el orden exacto:fuente
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:Debería ser uno porque estas consultas para documentos eran
headers
iguales al objeto{From: "[email protected]"}
, 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
De las declaraciones anteriores, ¿cuál debería ser el resultado de la consulta a continuación?
¿Y qué pasa si cambiamos el orden
From
y,To
es decir, lo mismo que los subdocumentos de los segundos documentos?Para usar el operador de punto, creo que es muy claro para todos. Veamos el resultado de la consulta a continuación:
Espero que estas explicaciones con el ejemplo anterior hagan que alguien sea más claro al buscar consultas con subdocumentos .
fuente