¿Cómo buscar documentos en una colección a los que les falta un campo determinado en MongoDB?
107
Sí, es posible usar $ existe :
db.things.find( { a : { $exists : false } } ); // return if a is missing
Cuando es verdadero, $ existe coincide con los documentos que contienen el campo, incluidos los documentos donde el valor del campo es nulo. Si es falso, la consulta devuelve solo los documentos que no contienen el campo.
$existconsultas no pueden utilizar índices (consulte mongodb.org/display/DOCS/… ).scope :without_recommendation, :where => {:recommendation => {"$exists"=>false}}Si no le importa si falta el campo o
null(o si nunca lo esnull), puede usar el un poco más corto y seguro:Es más seguro porque
$existsregresarátrueincluso si el campo es nulo, lo que a menudo no es el resultado deseado y puede conducir a una NPE.fuente
nully no faltar. Este es un comportamiento realmente inesperado, porque no podría hacer lo mismo para0(que también lo esfalse), por lo quenulles una especie de excepción aquí. Por lo tanto, la mejor práctica es la respuesta más legible$exists: falseque no sea ambigua. Recuerde, su variante un poco más corta no es realmente más corta si necesita tener ese comentario detrás.a, yaaseanullporqueafalta o porque falta, entonces$existsno es lo suficientemente bueno, ya que no detectará los casos dondeaestánull.