MongoDB не равен



Я пытаюсь отобразить запрос в MongoDB, где текстовое поле не " (пустое)



{ 'name' : { $not : '' }}


однако я получаю ошибку invalid use of $not



Я просмотрел документацию, но примеры, которые они используют, предназначены для сложных случаев (с регулярным выражением и $not отрицание другого оператора).



как бы я сделал простую вещь я пытаюсь сделать?

508   6  

6 ответов:

использовать $ne--$not должен следовать стандартный оператор:

примеры для $ne, что означает не равно:

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" }

и теперь $not, который принимает предикат ($ne) и отрицает его ($not):

db.test.find({'post': {$not: {$ne : ""}}})
{ "_id" : ObjectId("4f68b19c768972d396fe2267"), "author" : "me", "post" : "" }

Если вы хотите сделать несколько $ne затем сделать

db.users.find({name : {$nin : ["mary", "dick", "jane"]}})

использовать $ne вместо $not

http://docs.mongodb.org/manual/reference/operator/ne/#op._S_ne

db.collections.find({"name": {$ne: ""}});

С Mongo docs:

The $not оператор влияет только на другие операторы и не может проверить поля и документы независимо друг от друга. Итак, используйте $not оператора логические дизъюнкции и $ne оператор для проверки содержимого поля напрямую.

так как вы тестируете поле непосредственно $ne является правильным оператором для использования здесь.

Edit:

ситуации, когда вы хотели бы использовать $not - это:

db.inventory.find( { price: { $not: { $gt: 1.99 } } } )

что бы выбрать все документы, где:

  • значение поля цена меньше или равно 1,99 или цена

Если есть null в массиве и вы хотите избежать этого:

db.test.find({"contain" : {$ne :[] }}).pretty()

пример реальной жизни; найти все, но не текущий пользователь:

var players = Players.find({ my_x: player.my_x,  my_y: player.my_y, userId: {$ne: Meteor.userId()} }); 

Comments

    Ничего не найдено.