MongoDB không bằng


102

Tôi đang cố gắng hiển thị một truy vấn trong MongoDB trong đó trường văn bản không phải là '' (trống)

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

Tuy nhiên tôi gặp lỗi invalid use of $not

Tôi đã xem qua tài liệu nhưng các ví dụ mà họ sử dụng dành cho các trường hợp phức tạp (với regexp và $notphủ định một toán tử khác).

Làm thế nào tôi sẽ làm điều đơn giản mà tôi đang cố gắng làm?

Câu trả lời:


147

Sử dụng $ne- $not phải được tuân theo bởi toán tử tiêu chuẩn:

Ví dụ cho $ne, viết tắt của không bằng:

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

Và bây giờ $not, nó nhận vào vị từ ( $ne) và phủ định nó ( $not):

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

4
Đối với những người tò mò $neđề cập đến "không bằng".
abraham

1
Câu trả lời này có số lượng bình chọn lớn, nhưng giải thích rất rõ ràng. Điều gì đang xảy ra trong ví dụ có cả $ not và $ ne?
GaTechThomas

như vậy trong ngắn $not :{ $nephương tiện $eq, đây là những gì bạn đang cố gắng để nói?
Anu

61

Nếu bạn muốn làm nhiều $nethì hãy làm

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


10

Từ tài liệu Mongo :

Nhà $notđiều hành chỉ ảnh hưởng đến các nhà khai thác khác và không thể kiểm tra các trường và tài liệu một cách độc lập. Vì vậy, hãy sử dụng $nottoán tử cho các hàm logic và $netoán tử để kiểm tra trực tiếp nội dung của các trường.

Vì bạn đang kiểm tra trường trực tiếp $nelà nhà điều hành phù hợp để sử dụng ở đây.

Biên tập:

Một tình huống mà bạn muốn sử dụng $notlà:

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

Điều đó sẽ chọn tất cả các tài liệu trong đó:

  • Giá trị trường giá nhỏ hơn hoặc bằng 1,99 hoặc giá
  • Trường không tồn tại

3

Nếu có nullmột mảng trong một mảng và bạn muốn tránh nó:

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

1

Ví dụ thực tế cuộc sống; tìm tất cả trừ người dùng hiện tại:

var players = Players.find({ my_x: player.my_x,  my_y: player.my_y, userId: {$ne: Meteor.userId()} }); 
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.