Dato che c'è molta confusione riguardo alle query sulla raccolta MongoDB con documenti secondari , ho pensato che valesse la pena spiegare le risposte sopra con esempi:
Innanzitutto ho inserito solo due oggetti nella collezione e precisamente: message
come:
> 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"
}
}
>
Quindi qual è il risultato della query: db.messages.find({headers: {From: "reservations@marriott.com"} }).count()
Dovrebbe essere uno perché queste query per documenti erano headers
uguali all'oggetto {From: "reservations@marriott.com"}
, cioè non contengono altri campi o dovremmo specificare l'intero sotto-documento come valore di un campo.
Come per la risposta di @ Edmondo1984
Le corrispondenze di uguaglianza all'interno dei documenti secondari selezionano i documenti se il documento secondario corrisponde esattamente al documento secondario specificato, incluso l'ordine dei campi .
Dalle affermazioni precedenti, quale dovrebbe essere il risultato della query di seguito?
> db.messages.find({headers: {To: "kprasad.iitd@gmail.com", From: "reservations@marriott.com"} }).count()
0
E se cambiassimo l'ordine From
e To
cioè lo stesso dei sottodocumenti dei secondi documenti?
> db.messages.find({headers: {From: "reservations@marriott.com", To: "kprasad.iitd@gmail.com"} }).count()
1
quindi, corrisponde esattamente al documento secondario specificato, incluso l'ordine dei campi .
Per l'utilizzo dell'operatore punto, penso che sia molto chiaro per tutti. Vediamo il risultato della query seguente:
> db.messages.find( { 'headers.From': "reservations@marriott.com" } ).count()
2
Spero che queste spiegazioni con l'esempio di cui sopra rendano qualcuno più chiaro nel trovare query con documenti secondari .