Оскільки існує велика плутанина щодо запитів колекції MongoDB з піддокументами , я вважав, що варто пояснити вищезазначені відповіді на прикладах:
Спочатку я вставив у колекцію лише два об’єкти, а саме: message
as:
> 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"
}
}
>
Отже, що є результатом запиту: db.messages.find({headers: {From: "reservations@marriott.com"} }).count()
Він повинен бути одним, тому що ці запити для документів, де headers
дорівнює об'єкту {From: "reservations@marriott.com"}
, тобто не містять інших полів, або ми повинні вказати весь піддокумент як значення поля.
Так, відповідно до відповіді від @ Edmondo1984
Збіги рівності в піддокументах вибирають документи, якщо піддокумент відповідає точно вказаному піддокументу, включаючи порядок польових .
З наведених тверджень, яким повинен бути результат запиту нижче?
> db.messages.find({headers: {To: "kprasad.iitd@gmail.com", From: "reservations@marriott.com"} }).count()
0
А що , якщо ми змінимо порядок From
і To
то є такі ж , як піддокументами друге документів?
> db.messages.find({headers: {From: "reservations@marriott.com", To: "kprasad.iitd@gmail.com"} }).count()
1
Таким чином, він відповідає точно вказаному піддокументу, включаючи порядок використання поля .
Для використання точкового оператора, я думаю, це зрозуміло для кожного. Давайте подивимось результат наступного запиту:
> db.messages.find( { 'headers.From': "reservations@marriott.com" } ).count()
2
Я сподіваюсь, що ці пояснення з наведеним вище прикладом зроблять комусь більшу зрозумілість щодо пошуку запиту з піддокументами .