MongoDB не равно
Я пытаюсь отобразить запрос в MongoDB, где текстовое поле не '' (пробел)
{ 'name' : { $not : '' }}
Однако я получаю ошибку invalid use of $not
Я просмотрел документацию, но примеры, которые они используют, предназначены для сложных случаев (с regexp и $not
, отрицающими другой оператор).
Как мне сделать простую вещь, которую я пытаюсь сделать?
Ответы
Ответ 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"]}})
Ответ 3
Используйте $ne
вместо $not
http://docs.mongodb.org/manual/reference/operator/ne/#op._S_ne
db.collections.find({"name": {$ne: ""}});
Ответ 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()} });