2011-12-19 11 views
130

¿Hay alguna manera de especificar una condición de "donde el documento no contiene el campo"?MongoDB: ¿encuentra un documento por inexistencia de un campo?

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

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


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

Posible duplicado de [Mongo: busca elementos que no tienen un campo determinado] (http://stackoverflow.com/questions/5719408/mongo-find-items-that-dont-have-a-certain-field) –

+2

También puedes probar 'db.mycollection.find ({" price ": null})' – evilReiko

Respuesta

229

Prueba el operador $exists:

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

y ver its documentation.

+6

+1. Sin embargo, tenga en cuenta que tales consultas no pueden usar indexación y pueden ser muy lentas en colecciones grandes. – mnemosyn

+7

Gran punto - gracias. Sé que esta advertencia es cierta en MongoDB versión 1.8.xy anterior; pero creo que las consultas con restricciones de campo $ exists ahora pueden hacer uso de índices en la versión 2.0 ...? – dampier

+5

De hecho, pueden. ¡Gracias! Parece que no estaba actualizado. – mnemosyn

Cuestiones relacionadas