Подтвердить что ты не робот

MongoDB не равно

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

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

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

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

Как мне сделать простую вещь, которую я пытаюсь сделать?

4b9b3361

Ответ 1

За $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" : "" }

Ответ 2

Если вы хотите сделать несколько $ne, тогда сделайте

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

Ответ 4

Из Mongo docs:

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

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

Edit:

Ситуация, в которой вы хотели бы использовать $not:

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

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

  • Значение поля цены меньше или равно 1,99 или цена
  • Поле не существует

Ответ 5

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

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

Ответ 6

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

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