Как запросить вложенные объекты?
У меня проблема при запросе mongoDB с вложенными объектами нотации:
db.messages.find( { headers : { From: "reservations@marriott.com" } } ).count()
0
db.messages.find( { 'headers.From': "reservations@marriott.com" } ).count()
5
Я не вижу, что я делаю неправильно. Я ожидаю, что нотация вложенных объектов вернет тот же результат, что и запрос точечной нотации. Где я ошибаюсь?
2 ответа:
db.messages.find( { headers : { From: "reservations@marriott.com" } } )это запросы для документов, где
headersравна{ From: ... }, т. е. не содержит никаких других областях.
db.messages.find( { 'headers.From': "reservations@marriott.com" } )это только смотрит на
headers.Fromполе, не затронутое другими полями, содержащимися или отсутствующими в,headers.
два механизма запроса работают по-разному, как это предлагается в документы в раздел вложенных документов:
когда поле содержит внедренный документ (т. е.,subdocument), вы можете либо указать всю subdocument как значение поля, или "reach into"subdocument С помощью точечной нотации, чтобы указать значения для отдельных полей в subdocument:
равенство совпадения внутри вложенных документов выберите документы, если вложенный документ точно соответствует указанному вложенному документу, включая порядок полей.
в следующем примере запрос соответствует всем документам, где значение источника поля является вложенным документом, содержащим только поле
companyсо значением'ABC123'и полеaddressсо значением'123 Street', в точном порядке:db.inventory.find( { producer: { company: 'ABC123', address: '123 Street' } });