Поскольку существует большая путаница с запросами коллекции MongoDB с субдокументами, я подумал, что стоит объяснить приведенные выше ответы на примерах:
Сначала я вставил в коллекцию только два объекта, а именно: message как:
> db.messages.find().pretty()
{
"_id" : ObjectId("5cce8e417d2e7b3fe9c93c32"),
"headers" : {
"From" : "[email protected]"
}
}
{
"_id" : ObjectId("5cce8eb97d2e7b3fe9c93c33"),
"headers" : {
"From" : "[email protected]",
"To" : "[email protected]"
}
}
>
Итак, каков результат запроса: db.messages.find({headers: {From: "[email protected]"} }).count()
Он должен быть один, потому что эти запросы для документов, где headers равно объекту {From: "[email protected]"}, т. Е. Не содержат других полей, или мы должны указать весь вложенный документ как значение поля.
Итак, согласно ответу @ Edmondo1984
Равенство совпадает с вложенными документами. Выберите документы, если вложенный документ соответствует точно указанному вложенному документу, включая порядок полей.
Каким должен быть результат запроса из приведенных выше утверждений?
> db.messages.find({headers: {To: "[email protected]", From: "[email protected]"} }).count()
0
А что, если мы изменим порядок From и To, т.е. такой же, как субдокументы вторых документов?
> db.messages.find({headers: {From: "[email protected]", To: "[email protected]"} }).count()
1
поэтому он соответствует точно указанному вложенному документу, включая порядок полей.
Я думаю, что использование точечного оператора очень понятно для всех. Давайте посмотрим на результат запроса ниже:
> db.messages.find( { 'headers.From': "[email protected]" } ).count()
2
Я надеюсь, что эти пояснения к приведенному выше примеру внесут ясность в поисковый запрос с вложенными документами.
person
krishna Prasad
schedule
05.05.2019