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"}


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ę .


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.