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 cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.