MongoDB: znaleźć dokument na podstawie braku pola?

173

Czy istnieje sposób na określenie warunku „gdzie dokument nie zawiera pola”?

Na przykład chcę znaleźć tylko pierwszą z tych dwóch, ponieważ nie ma ona pola „cena”.

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


{"fruit":"banana", "color":"yellow", "price":"2.00"}
k00k
źródło
3
Możesz też spróbowaćdb.mycollection.find({ "price" : null })
evilReiko

Odpowiedzi:

329

Wypróbuj $existsoperatora:

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

i przejrzyj jego dokumentację .

wilgotniejszy
źródło
12
+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
10
Świetna uwaga - dzięki. Wiem, że to zastrzeżenie jest prawdziwe w MongoDB w wersji 1.8.x i wcześniejszych; ale myślałem, że zapytania z ograniczeniami pola $ istnieją mogą teraz korzystać z indeksów w wersji 2.0 ...?
wilgotny