MongoDB: ¿Encontrar un documento por inexistencia de un campo?

173

¿Hay alguna manera de especificar una condición de "donde el documento no contiene campo"?

Por ejemplo, solo quiero encontrar el primero de estos 2 porque no tiene el campo "precio".

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


{"fruit":"banana", "color":"yellow", "price":"2.00"}
k00k
fuente
3
También puedes probardb.mycollection.find({ "price" : null })
evilReiko

Respuestas:

329

Prueba el $existsoperador:

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

y ver su documentación .

más húmedo
fuente
12
+1. Sin embargo, tenga en cuenta que tales consultas no pueden usar la indexación y pueden ser muy lentas en colecciones grandes.
mnemosyn
10
Gran punto, gracias. Sé que esta advertencia es válida en MongoDB versión 1.8.xy anteriores; pero pensé que las consultas con restricciones de campo $ exist ahora pueden hacer uso de índices en la versión 2.0 ...?
húmedo