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


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 .


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.