2011-12-19 12 views
130

Czy istnieje sposób określenia warunku "gdzie dokument nie zawiera pola"?MongoDB: Znajdź dokument przez nieistnienie pola?

Na przykład chcę znaleźć tylko pierwszy z tych 2, ponieważ nie ma pola "cena".

{"fruit":"apple", "color":"red"} 


{"fruit":"banana", "color":"yellow", "price":"2.00"} 
+0

Prawdopodobny duplikat [Mongo: znajdź przedmioty, które nie mają określonego pola] (http://stackoverflow.com/questions/5719408/mongo-find-items-that-dont-have-a-ertain-field) –

+2

Możesz również wypróbować 'db.mycollection.find ({" price ": null})' – evilReiko

Odpowiedz

229

Spróbuj operatora $exists:

db.mycollection.find({ "price" : { "$exists" : false } }) 

i zobaczyć its documentation.

+6

+1. Należy jednak pamiętać, że takie zapytania nie mogą korzystać z indeksowania i mogą być bardzo powolne w przypadku dużych kolekcji. – mnemosyn

+7

Świetny punkt - dzięki. Wiem, że to zastrzeżenie jest prawdziwe w MongoDB w wersji 1.8.x i wcześniej; ale myślałem, że kwerendy z $ istnieje ograniczenia pola mogą teraz korzystać z indeksów w wersji 2.0 ...? – dampier

+5

Rzeczywiście - mogą. Dzięki! Wydaje się, że nie byłem na czasie. – mnemosyn

Powiązane problemy