Как запросить вложенные объекты?
У меня проблема при запросе 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' } });