2013-06-13 22 views
10

Làm thế nào tôi có thể tìm kiếm các hồ sơ lọc trong một lĩnh vực có giá trị undefined:Làm cách nào để khớp với giá trị 'không xác định' trong Khung công tác tổng hợp MongoDB?

db.records.aggregate({ 
    $match: { 
     myField: "undefined", 
    } 
}) 
+2

Làm thế nào để bạn xác định không xác định? Bạn có ý nghĩa giống như ['$ exist'] (http://docs.mongodb.org/manual/reference/operator/exists/)? Nếu có thể, hãy thêm tài liệu mẫu và truy vấn thông thường sẽ trả về nó. Nhìn vào câu hỏi của bạn, ''undefined'' là một chuỗi, giống như'' Hello, World! ''. – ixe013

Trả lời

19

Nếu bạn muốn lọc ra các văn bản có một số lĩnh vực còn thiếu, sử dụng toán tử $exists.

này hoạt động trên máy tính của tôi:

> db.test.drop() 
true 
> db.test.insert({'Hello':'World!', 'myField':42}) 
> db.test.insert({'Hello again':'World!'}) 
> db.test.aggregate({'$match':{ 'myField':{'$exists':false} }}) 
{ 
     "result" : [ 
       { 
         "_id" : ObjectId("51b9cd2a6c6a334430ec0c98"), 
         "Hello again" : "World!" 
       } 
     ], 
     "ok" : 1 
} 

Các tài liệu có myField hiện tại không hiển thị trong kết quả.

+5

Toán tử [$ type] (http://docs.mongodb.org/manual/reference/operator/type/) cũng có sẵn để tìm kiếm các trường có giá trị 'null' (cũng có kiểu không được chấp nhận' undefined'). Mục [FAQ] (http://docs.mongodb.org/manual/faq/developers/#how-do-i-query-for-fields-that-have-null-values) giải thích truy vấn cho null và/hoặc các trường bị thiếu (các toán tử giống nhau có sẵn cho khung tổng hợp). Ví dụ: 'db.test.aggregate ({'$ match': {'myField': {'$ type': 10}}})' sẽ khớp với các tài liệu có 'myField' được xác định nhưng giá trị của nó là' null' . – jimoleary

24

Lọc nó bằng cách $type:6, (mongodb referece, lưu ý rằng loại hình này đánh dấu là 'phản đối'):

db.records.aggregate({ 
    $match: { 
     myField: {'$type':6}, 
    } 
}) 
+3

Cảm ơn vì điều này. Câu trả lời được chấp nhận dường như không thực sự trả lời câu hỏi nhưng điều này có ích và đáng ngạc nhiên là nếu bạn cố gắng tìm kiếm 'undefined', nó sẽ cho bạn biết rằng bạn không thể. – Chris

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