Como há muita confusão sobre as consultas da coleção MongoDB com sub-documentos , achei que vale a pena explicar as respostas acima com exemplos:
Primeiro, inseri apenas dois objetos na coleção, 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"
}
}
>
Então, qual é o resultado da consulta: db.messages.find({headers: {From: "reservations@marriott.com"} }).count()
Deve ser uma porque essas consultas para documentos são headers
iguais ao objeto {From: "reservations@marriott.com"}
, apenas, por exemplo, não contém outros campos ou devemos especificar todo o sub-documento como o valor de um campo.
Então, de acordo com a resposta de @ Edmondo1984
Correspondências de igualdade nos sub-documentos selecionam documentos se o subdocumento corresponder exatamente ao sub-documento especificado, incluindo a ordem dos campos .
A partir das instruções acima, qual deve ser o resultado da consulta abaixo?
> db.messages.find({headers: {To: "kprasad.iitd@gmail.com", From: "reservations@marriott.com"} }).count()
0
E se mudarmos a ordem From
e, por exemplo, o To
mesmo que os sub-documentos dos segundos documentos?
> db.messages.find({headers: {From: "reservations@marriott.com", To: "kprasad.iitd@gmail.com"} }).count()
1
portanto, corresponde exatamente ao sub-documento especificado, incluindo a ordem dos campos .
Para usar o operador de ponto, acho que é muito claro para todos. Vamos ver o resultado da consulta abaixo:
> db.messages.find( { 'headers.From': "reservations@marriott.com" } ).count()
2
Espero que essas explicações com o exemplo acima tornem alguém mais claro sobre a consulta de busca com sub-documentos .