У меня проблема при запросе mongoDB с обозначением вложенных объектов:
db.messages.find( { headers : { From: "reservations@marriott.com" } } ).count()
0
db.messages.find( { 'headers.From': "reservations@marriott.com" } ).count()
5
Я не вижу, что я делаю неправильно. Я ожидаю, что нотация вложенных объектов вернет тот же результат, что и запрос точечной нотации. Где я не прав?
conditions['some.path'] = 'value'
своей бизнес-логики, а затем выполнить один запрос в конце:find(conditions, fields, callback);
domains.domain.com
. Есть ли обходной путь для этого сценария (без изменения domain.com на что-то другое, например, domain_com)?Механизм двух запросов работает по-разному, как предлагается в документации в разделе Поддокументы :
Если поле имеет встроенный документ (т.е. целого документ ), вы можете либо указать весь поддокумент в качестве значения поля, или «Достать в» в поддокумент , используя точечную нотацию, чтобы указать значения для отдельных полей в поддокументе :
Равенство совпадает в вложенных документах, выбирают документы, если вложенный документ точно соответствует указанному вложенному документу, включая порядок полей.
В следующем примере запрос сопоставляет все документы, в которых значение источника поля является вложенным документом, содержащим только поле
company
со значением'ABC123'
и полеaddress
со значением'123 Street'
в точном порядке:источник
Поскольку существует большая путаница в запросах коллекции MongoDB с поддокументами , я подумал, что стоит объяснить приведенные выше ответы примерами:
Сначала я вставил только два объекта в коллекцию, а именно:
message
как:Это должен быть один, потому что эти запросы для документов
headers
равны объекту{From: "reservations@marriott.com"}
, т. Е. Не содержат других полей, или мы должны указать весь поддокумент в качестве значения поля.Так что согласно ответу от @ Edmondo1984
Из приведенных выше утверждений, каков должен быть результат запроса ниже?
А что, если мы изменим порядок
From
иTo
т. Е. Такие же, как субдокументы вторых документов?Для использования точечного оператора, я думаю, это очень ясно для каждого. Давайте посмотрим на результат запроса ниже:
Я надеюсь, что эти объяснения с приведенным выше примером сделают кого-то более ясным при поиске запроса с поддокументами .
источник