Mam problem podczas zapytania do mongoDB z notacją zagnieżdżonych obiektów:
db.messages.find( { headers : { From: "[email protected]" } } ).count()
0
db.messages.find( { 'headers.From': "[email protected]" } ).count()
5
Nie widzę, co robię źle. Oczekuję, że notacja zagnieżdżonego obiektu zwróci ten sam wynik, co zapytanie notacji kropkowej. Gdzie się mylę?
conditions['some.path'] = 'value'
w mojej logice biznesowej, a następnie uruchamiam jedno zapytanie na końcu:find(conditions, fields, callback);
domains.domain.com
. Czy istnieje jakieś obejście tego scenariusza (bez zmiany domain.com na coś innego, np. Domain_com)?Dwa mechanizmy zapytań działają na różne sposoby, jak sugerowano w dokumentach w sekcji Subdocuments :
Gdy pole zawiera osadzony dokument (tj. Dokument podrzędny ), możesz albo podać cały dokument podrzędny jako wartość pola, albo „dotrzeć do” dokumentu podrzędnego za pomocą notacji kropkowej, aby określić wartości dla poszczególnych pól w dokumencie podrzędnym :
Dopasowania równości w dokumentach podrzędnych wybierają dokumenty, jeśli dokument podrzędny pasuje dokładnie do określonego dokumentu podrzędnego, w tym do kolejności pól.
W poniższym przykładzie zapytanie pasuje do wszystkich dokumentów, w których wartość producenta pola jest dokumentem podrzędnym zawierającym tylko pole
company
z wartością'ABC123'
i poleaddress
z wartością'123 Street'
, w dokładnej kolejności:źródło
Ponieważ istnieje wiele nieporozumień dotyczących zapytań dotyczących kolekcji MongoDB z dokumentami podrzędnymi , pomyślałem, że warto wyjaśnić powyższe odpowiedzi przykładami:
Najpierw wstawiłem tylko dwa obiekty do kolekcji, mianowicie:
message
as:Powinno być jedno, ponieważ zapytania dotyczące dokumentów, w których jest
headers
równy obiektowi{From: "[email protected]"}
, tzn. Nie zawiera innych pól, lub powinniśmy podać cały poddokument jako wartość pola.Więc zgodnie z odpowiedzią z @ Edmondo1984
Z powyższych instrukcji, jaki powinien być wynik poniżej zapytania?
A co, jeśli zmienimy kolejność,
From
aTo
więc taką samą jak poddokumenty drugich dokumentów?Myślę, że użycie operatora kropki jest bardzo jasne dla każdego. Zobaczmy wynik poniższego zapytania:
Mam nadzieję, że wyjaśnienia powyższego przykładu sprawią, że ktoś będzie bardziej przejrzysty w wyszukiwaniu zapytań z pod-dokumentami .
źródło