MongoDB: trova un documento per inesistenza di un campo?


173

C'è un modo per specificare una condizione di "dove il documento non contiene campo"?

Ad esempio, voglio trovare solo il primo di questi 2 perché non ha il campo "prezzo".

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


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


3
Puoi anche provaredb.mycollection.find({ "price" : null })
evilReiko il

Risposte:


329

Prova l' $existsoperatore:

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

e vedere la sua documentazione .


12
+1. Tuttavia, tieni presente che tali query non possono utilizzare l'indicizzazione e potrebbero essere molto lente su raccolte di grandi dimensioni.
mnemosyn,

10
Ottimo punto - grazie. So che questo avvertimento è vero nella versione 1.8.x di MongoDB e precedenti; ma ho pensato che le query con vincoli di campo $ esistano ora possono utilizzare gli indici nella versione 2.0 ...?
umido il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.