MongoDB tidak sama dengan

102

Saya mencoba menampilkan kueri di MongoDB di mana bidang teks tidak '' (kosong)

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

Namun saya mendapatkan kesalahan invalid use of $not

Saya telah melihat-lihat dokumentasinya tetapi contoh yang mereka gunakan adalah untuk kasus-kasus rumit (dengan regexp dan $notmeniadakan operator lain).

Bagaimana saya melakukan hal sederhana yang saya coba lakukan?

Akshat
sumber

Jawaban:

147

Penggunaan $ne- $notharus diikuti oleh operator standar:

Contoh $ne, yang berarti tidak sama:

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

Dan sekarang $not, yang mengambil predicate ( $ne) dan meniadakannya ( $not):

db.test.find({'post': {$not: {$ne : ""}}})
{ "_id" : ObjectId("4f68b19c768972d396fe2267"), "author" : "me", "post" : "" }
om-nom-nom
sumber
4
Bagi mereka yang penasaran $nemengacu pada "tidak sama".
abraham
1
Jawaban ini memiliki jumlah suara yang besar, namun penjelasannya sangat tidak jelas. Apa yang terjadi pada contoh yang memiliki $ not dan $ ne?
GaTechThomas
jadi singkatnya $not :{ $neberarti $eq, ini adalah apa yang Anda katakan?
Anu
61

Jika Anda ingin melakukan lebih dari satu, $nelakukan

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

Dari dokumen Mongo :

The $notOperator hanya mempengaruhi operator lain dan tidak dapat memeriksa bidang dan dokumen secara independen. Jadi, gunakan $notoperator untuk disjungsi logis dan $neoperator untuk menguji konten bidang secara langsung.

Karena Anda menguji lapangan secara langsung $neadalah operator yang tepat untuk digunakan di sini.

Edit:

Situasi di mana Anda ingin menggunakan $notadalah:

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

Itu akan memilih semua dokumen di mana:

  • Nilai bidang harga kurang dari atau sama dengan 1,99 atau harga
  • Bidang tidak ada
nilsi
sumber
3

Jika ada nulldalam sebuah array dan Anda ingin menghindarinya:

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

Contoh kehidupan nyata; temukan semua kecuali pengguna saat ini:

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