J'essaie d'afficher une requête dans MongoDB où un champ de texte n'est pas '' (vide)
{ 'name' : { $not : '' }}
Cependant, j'obtiens l'erreur invalid use of $not
J'ai parcouru la documentation, mais les exemples utilisés sont destinés à des cas compliqués (avec regexp et $not
pour annuler un autre opérateur).
Comment pourrais-je faire la chose simple que j'essaie de faire?
Utilisez $ne
- $not
devrait être suivi par l'opérateur standard:
Un exemple pour $ne
, qui signifie non égal:
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" }
Et maintenant, $not
, qui prend le prédicat ($ne
) et l’annule ($not
):
db.test.find({'post': {$not: {$ne : ""}}})
{ "_id" : ObjectId("4f68b19c768972d396fe2267"), "author" : "me", "post" : "" }
Si vous voulez faire plusieurs $ne
puis faites
db.users.find({name : {$nin : ["mary", "dick", "jane"]}})
Utilisez $ne
au lieu de $not
http://docs.mongodb.org/manual/reference/operator/ne/#op._S_ne
db.collections.find({"name": {$ne: ""}});
De la dongo Mongo :
L'opérateur
$not
n'affecte que les autres opérateurs et ne peut pas vérifier champs et documents indépendamment. Utilisez donc l'opérateur$not
pour les disjonctions logiques et l'opérateur$ne
pour tester le contenu de champs directement.
Puisque vous testez directement le champ, $ne
est le bon opérateur à utiliser ici.
Modifier:
Une situation dans laquelle vous souhaitez utiliser $not
est la suivante:
db.inventory.find( { price: { $not: { $gt: 1.99 } } } )
Cela sélectionnerait tous les documents où:
S'il existe une null
dans un tableau et que vous souhaitez l'éviter:
db.test.find({"contain" : {$ne :[] }}).pretty()
Exemple de la vie réelle; trouver tout sauf l'utilisateur actuel:
var players = Players.find({ my_x: player.my_x, my_y: player.my_y, userId: {$ne: Meteor.userId()} });