2013-03-11 42 views
6

tôi có các đối tượng trong bộ sưu tập của tôi trông giống như:MongoDB mảng truy vấn với null giá trị

{ MyArray:[null, "some value", null] } 

tôi muốn truy vấn các đối tượng có giá trị null như một phần tử mảng. Truy vấn

db.collection.find({"MyArray":null}) 

không hoạt động, dường như chỉ tìm thấy các đối tượng có MyArray bị thiếu, ví dụ:

{ MyArray:null } 

Tôi làm cách nào để xác định truy vấn của mình?

EDIT: Xin vui lòng xem một trong những đối tượng thật của tôi:

{ 
     "_id" : BinData(3,"ch9PrWveqU6niB6FGVhIOg=="), 
     "PeerGroup" : "male", 
     "ProductId" : BinData(3,"weRiKOtXEUSDZHkGHLcwzw=="), 
     "CategoryIds" : [ 
       BinData(3,"BXzpwVQozECLaPkJy26t6Q=="), 
       BinData(3,"ox303ZeM50KelvoUbPBJ8Q=="), 
       BinData(3,"26ziaY+G9UKMyjmtVkkhcg=="), 
       BinData(3,"D2X8vObte0eJHNcDfp2HBw==") 
     ], 
     "ShopId" : BinData(3,"ZdfPmrlKR0GkLPC4djJuKw=="), 
     "BrandId" : BinData(3,"kCHyuyLvgECxPF1nxwr7qQ=="), 
     "Created" : ISODate("2012-08-24T07:42:12.416Z"), 
     "LastActivity" : ISODate("2013-01-14T19:38:11.776Z"), 
     "Price" : 129.9, 
     "Sale" : false, 
     "Rating" : 11.057340703605368, 
     "RatingTimed" : 0.05670431130054035, 
     "Available" : null, 
     "FreeDelivery" : null, 
     "Attrs" : [ 
       null, 
       null, 
       null, 
       null 
     ] 
} 

Và sau đó tôi truy vấn bởi:

db.collection.find({"Attrs":null}) 

trong đó sản lượng không có kết quả.

+0

'> db.collection.find ({" MyArray ": null})' cho '{" _id ": ObjectId (" 513da72088ba1cdba2745f1e ")," MyArray ": [null," some value ", null]} '. Như mong đợi...? –

+0

Truy vấn sẽ hoạt động. Hiển thị cho bạn dữ liệu thực và yêu cầu truy vấn. –

+0

Đã thêm dữ liệu thực và truy vấn vào câu hỏi của tôi. – Max

Trả lời

1

Ok, tôi đã tìm ra bằng cách tải các ứng cử viên "vô giá" của tôi qua trình điều khiển C# của tôi và nó chỉ ra rằng các giá trị không phải là null, nhưng Bson Undefined !! Chúng được hiển thị là "null" trong shell! Xem http://jira.mongodb.org/browse/SERVER-2426. này hoạt động:

db.xxx.find({"Attrs":{$type:6}})

0

(không thực sự là một câu trả lời, nhưng không phù hợp với một bình luận)

Tôi không thể tạo lại vấn đề, tôi sao chép dữ liệu của mình vào vỏ Mongo và cố gắng trong các phiên bản MongoDB 2.2.3, 2.4.1 và đây trong 2.4.0:

MongoDB phiên bản vỏ: 2.4.0 kết nối với: test

> db.version() 
2.4.0 
> db.xxx.insert({ 
... "_id" : BinData(3,"ch9PrWveqU6niB6FGVhIOg=="), 
... "PeerGroup" : "male", 
... "ProductId" : BinData(3,"weRiKOtXEUSDZHkGHLcwzw=="), 
... "CategoryIds" : [ 
... BinData(3,"BXzpwVQozECLaPkJy26t6Q=="), 
... BinData(3,"ox303ZeM50KelvoUbPBJ8Q=="), 
... BinData(3,"26ziaY+G9UKMyjmtVkkhcg=="), 
... BinData(3,"D2X8vObte0eJHNcDfp2HBw==") 
... ], 
... "ShopId" : BinData(3,"ZdfPmrlKR0GkLPC4djJuKw=="), 
... "BrandId" : BinData(3,"kCHyuyLvgECxPF1nxwr7qQ=="), 
... "Created" : ISODate("2012-08-24T07:42:12.416Z"), 
... "LastActivity" : ISODate("2013-01-14T19:38:11.776Z"), 
... "Price" : 129.9, 
... "Sale" : false, 
... "Rating" : 11.057340703605368, 
... "RatingTimed" : 0.05670431130054035, 
... "Available" : null, 
... "FreeDelivery" : null, 
... "Attrs" : [ 
... null, 
... null, 
... null, 
... null 
... ] 
... } 
...) 
> db.xxx.find({"Attrs":null}).pretty() 
{ 
    "_id" : BinData(3,"ch9PrWveqU6niB6FGVhIOg=="), 
    "PeerGroup" : "male", 
    "ProductId" : BinData(3,"weRiKOtXEUSDZHkGHLcwzw=="), 
    "CategoryIds" : [ 
     BinData(3,"BXzpwVQozECLaPkJy26t6Q=="), 
     BinData(3,"ox303ZeM50KelvoUbPBJ8Q=="), 
     BinData(3,"26ziaY+G9UKMyjmtVkkhcg=="), 
     BinData(3,"D2X8vObte0eJHNcDfp2HBw==") 
    ], 
    "ShopId" : BinData(3,"ZdfPmrlKR0GkLPC4djJuKw=="), 
    "BrandId" : BinData(3,"kCHyuyLvgECxPF1nxwr7qQ=="), 
    "Created" : ISODate("2012-08-24T07:42:12.416Z"), 
    "LastActivity" : ISODate("2013-01-14T19:38:11.776Z"), 
    "Price" : 129.9, 
    "Sale" : false, 
    "Rating" : 11.057340703605368, 
    "RatingTimed" : 0.05670431130054035, 
    "Available" : null, 
    "FreeDelivery" : null, 
    "Attrs" : [ 
     null, 
     null, 
     null, 
     null 
    ] 
} 

Xin vui lòng, sao chép chuỗi ở trên để vỏ Mongo của bạn và gửi kết quả ở đây.

17

Để tìm tài liệu với mảng, với các yếu tố vô hãy chạy:

db.collection.find({"keyWithArray":{$elemMatch:{"$in":[null], "$exists":true}}}) 

Theo safaribooksonline thích null phù hợp được thực hiện sử dụng $in (vì bạn không thể sử dụng $eq với null). Ngoài ra, so sánh với null:

{"something":null} 

sẽ phù hợp với các tài liệu với các thiết lập trường "cái gì đó" để null và mọi tài liệu mà không có trường "cái gì đó" ở tất cả. Vì vậy, chúng tôi phải đảm bảo khóa tồn tại bằng cách sử dụng $exists.

+0

C'mon @Max, đây sẽ là câu trả lời được chấp nhận ở đây. –

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