2013-07-08 18 views
10
db.History.find({'_file.project': 'someproject') 
     .populate('_file', 'name reference project') 
     .sort(sortField || '-created') 
     .limit(max || 64) 
     .exec(this); 

Tutaj próbuję znaleźć wszystkie dokumenty, które pasują do zaludnionego pola z odwołania _file. Wydaje się nie działać. Czy coś takiego jest w ogóle możliwe?Zapytanie mangusty na zaludnionym polu

Mogłem powielić pole projektu do tego obiektu, jako obejście tego problemu, ale wolałbym nie.

Odpowiedz

9

Nie, find parametr warunków zapytania może odnosić się tylko do pobieranej kolekcji.

populate nie jest łączeniem, jest po prostu wygodną funkcją do śledzenia głównej kwerendy z dodatkowymi zapytaniami, aby pobrać powiązane dane z innych kolekcji.

+0

Dzięki. Tak więc, aby mieć pewność, że w celu wysłania zapytania do kolekcji Historia na podstawie projektu, będę musiał dodać pole projektu, powielając je z modelu pliku? Pobieranie wszystkich dokumentów, a następnie filtrowanie nie jest opcją, ponieważ kolekcja History jest prawdopodobnie bardzo duża. –

+1

@ 0x80 Prawo, lub pobierz wszystkie dokumenty "Plik" z dopasowaniem "projektu", a następnie użyj zapytania '$ in' w stosunku do' Historii' używając wartości '_id' z pierwszego zapytania. – JohnnyHK

+0

Rozumiem. Dobrze wiedzieć, że są dwie opcje. Dzięki! –