2012-04-17 31 views
6

Tôi đang cố chọn tài liệu KHÔNG chứa giá trị trong mảng của tài liệu.

Tôi đang gặp hai vấn đề, mà tôi sẽ trình bày riêng rẽ:

(1) Tôi không thể có được các nhà điều hành $ không làm việc với một truy vấn giá trị trong mảng: Ví dụ, nếu tôi có các tài liệu sau đây trong bộ sưu tập của tôi:

{ _id: ObjectId("000000000000000000000000"), mylist: [ "red", "green", "blue" ] }

tôi có thể chọn tài liệu này sử dụng:

db.myCol.find({mylist:"red"})

Tuy nhiên, tôi muốn chọn tài liệu này bằng cách kiểm tra cho sự vắng mặt của cam:

db.myCol.find({$not:{mylist:"orange"}})

Tại sao điều này không làm việc?

(2) Tôi không thể nhận được giá trị trong truy vấn mảng để làm việc nếu các giá trị mảng là ObjectIds:

{ _id: Object("000000000000000000000000"), mylist: [ ObjectId("111111111111111111111111") ] }

Sau đây KHÔNG lấy tài liệu này:

myCol.find({mylist:ObjectId("111111111111111111111111")})

Ai đó có thể đề xuất những gì tôi có thể làm sai?

Trả lời

6

Không có $not rằng công trình như thế nào, bạn muốn $ne đối với trường hợp đơn giản như của bạn:

db.myCol.find({ mylist: { $ne: 'orange' } }) 

thứ hai của bạn nên (và không) hoạt động tốt đối với tôi, có lẽ bạn đang sử dụng sai số của những người thân .

+0

Không hoàn toàn đúng, có một [$ không] (http://docs.mongodb.org/manual/reference/operator/not /) – nullabletype

+0

@nullabletype: Có phải '$ không phải là thứ gì đó mới mẻ hay tôi chỉ bỏ qua nó? Cảm ơn những người đứng đầu trong mọi trường hợp. –

3

Là một thay thế, bạn có thể sử dụng $ không như thế này:

{ 
    "mylist" : { 
     $not : { 
      $in : ["red"] 
     } 
    } 
} 
0
var queryarray = ['red'] 
db.myCol.find({ mylist: { $nin: queryarray } }) 
+0

Trong khi mã này có thể trả lời câu hỏi, cung cấp ngữ cảnh bổ sung về cách thức và lý do giải thích vấn đề này sẽ cải thiện giá trị lâu dài của câu trả lời. – cpburnz

Các vấn đề liên quan