MongoDB: Encontre um documento pela inexistência de um campo?

173

Existe uma maneira de especificar uma condição de "onde o documento não contém o campo"?

Por exemplo, eu quero encontrar apenas o primeiro desses 2 porque ele não tem o campo "preço".

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


{"fruit":"banana", "color":"yellow", "price":"2.00"}
k00k
fonte
3
Você também pode tentardb.mycollection.find({ "price" : null })
evilReiko

Respostas:

329

Experimente o $existsoperador:

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

e veja sua documentação .

mais úmido
fonte
12
+1. No entanto, lembre-se de que essas consultas não podem usar indexação e podem ser muito lentas em coleções grandes.
mnemosyn
10
Ótimo ponto - obrigado. Eu sei que essa advertência é verdadeira no MongoDB versão 1.8.xe antes; mas eu pensei que consultas com restrições de campo $ existentes agora podem fazer uso de índices na versão 2.0 ...?
Dampier