tutorial - mongodb university
MongoDB no es igual a (6)
Intento mostrar una consulta en MongoDB donde un campo de texto no está '''' (en blanco)
{ ''name'' : { $not : '''' }}
Sin embargo, obtengo el error de invalid use of $not
Revisé la documentación, pero los ejemplos que usan son para casos complicados (con expresiones regulares y $not
negar a otro operador).
¿Cómo haría lo simple que estoy tratando de hacer?
De los documentos de Mongo :
El operador
$not
solo afecta a otros operadores y no puede verificar los campos y documentos de forma independiente. Por lo tanto, utilice el operador$not
para las disyunciones lógicas y el operador$ne
para probar los contenidos de los campos directamente.
Como está probando el campo directamente $ne
es el operador correcto para usar aquí.
Editar:
Una situación en la que le gustaría usar $not
es:
db.inventory.find( { price: { $not: { $gt: 1.99 } } } )
Eso seleccionaría todos los documentos donde:
- El valor del campo de precio es menor o igual a 1.99 o el precio
- El campo no existe
Ejemplo de vida real; encontrar todos los usuarios, pero no el actual:
var players = Players.find({ my_x: player.my_x, my_y: player.my_y, userId: {$ne: Meteor.userId()} });
Si hay un null
en una matriz y desea evitarlo:
db.test.find({"contain" : {$ne :[] }}).pretty()
Si quieres hacer varios $ne
entonces hazlo
db.users.find({name : {$nin : ["mary", "dick", "jane"]}})
Use $ne
- $not
debe ser seguido por el operador estándar:
Un ejemplo para $ ne, que no significa igual:
use test
switched to db test
db.test.insert({author : ''me'', post: ""})
db.test.insert({author : ''you'', post: "how to query"})
db.test.find({''post'': {$ne : ""}})
{ "_id" : ObjectId("4f68b1a7768972d396fe2268"), "author" : "you", "post" : "how to query" }
Y ahora $ no, que toma predicado ($ ne) y lo niega ($ no):
db.test.find({''post'': {$not: {$ne : ""}}})
{ "_id" : ObjectId("4f68b19c768972d396fe2267"), "author" : "me", "post" : "" }
Use $ne
lugar de $not
http://docs.mongodb.org/manual/reference/operator/ne/#op._S_ne
db.collections.find({"name": {$ne: ""}});