我的收藏中的对象看起来像:
{ MyArray:[null, "some value", null] }
我想查询那些具有null值的对象作为数组元素。查询
db.collection.find({"MyArray":null})
不起作用,它似乎只找到MyArray为null的对象,例如
{ MyArray:null }
我如何定义查询?
编辑:请看我的一个真实物品:
{
"_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.collection.find({"Attrs":null})
没有结果。
答案 0 :(得分:28)
要查找包含数组的文档,请使用null元素运行:
db.collection.find({"keyWithArray":{$elemMatch:{"$in":[null], "$exists":true}}})
根据safaribooksonline正确的null
匹配是使用$in
执行的(因为您无法将$eq
与null
一起使用)。
此外,与null
:
{"something":null}
将文件与"某些内容匹配#34;字段设置为null和每个没有"的东西"现场。因此,我们必须使用$exists
确保密钥存在。
答案 1 :(得分:0)
好吧,我通过我的C#驱动程序加载我的“null”候选人来解决这个问题,事实证明这些值不是null,但是Bson Undefined !!它们在shell中显示为“null”!见http://jira.mongodb.org/browse/SERVER-2426。 这有效:
db.xxx.find({"Attrs":{$type:6}})
答案 2 :(得分:-1)
(不是真正的答案,但不适合评论)
我无法重现这个问题,我将你的数据复制到mongo shell并尝试使用MongoDB 2.2.3版,2.4.1版和2.4.0版:
MongoDB shell版本:2.4.0 连接到:测试
> 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
]
}
请将上述序列复制到您的mongo shell并在此处发布结果。