MongoDB не равен
Я пытаюсь отобразить запрос в MongoDB, где текстовое поле не " (пустое)
{ 'name' : { $not : '' }}
однако я получаю ошибку invalid use of $not
Я просмотрел документацию, но примеры, которые они используют, предназначены для сложных случаев (с регулярным выражением и $not отрицание другого оператора).
как бы я сделал простую вещь я пытаюсь сделать?
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вместо$nothttp://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