Mongodb mongo$ne查询,数组未按预期工作
我正试图使用插入的数据运行以下查询,如下所示。不管出于什么原因,值为0的$ne似乎不起作用。我用v2.0.4在linux和mac上都试过了。还使用mongo shell运行了这些 有人有什么想法吗?这是一个错误还是我误解了什么Mongodb mongo$ne查询,数组未按预期工作,mongodb,Mongodb,我正试图使用插入的数据运行以下查询,如下所示。不管出于什么原因,值为0的$ne似乎不起作用。我用v2.0.4在linux和mac上都试过了。还使用mongo shell运行了这些 有人有什么想法吗?这是一个错误还是我误解了什么 db.associated.insert({ "diskinfo" : { "physical" : [ {"merror_count" : "Count: 0"},
db.associated.insert({
"diskinfo" : {
"physical" : [
{"merror_count" : "Count: 0"},
{"merror_count" : "Count: 0"},
{"merror_count" : "Count: 0"},
{"merror_count" : "Count: 509"}
]
}})
db.associated.insert({
"diskinfo" : {
"physical" : [
{"merror_count" : "Count: 0"},
{"merror_count" : "Count: 5"},
{"merror_count" : "Count: 0"}
]
}})
db.associated.insert({
"diskinfo" : {
"physical" : [
{"merror_count" : "Count: 0"},
{"merror_count" : "Count: 0"},
{"merror_count" : "Count: 0"}
]
}})
在mongo shell上运行这些查询。并在评论中得到了结果
db.associated.find( { "diskinfo.physical.merror_count" : { $ne : 'Count: 0'}}).count()
// Result: 0, Expected: 2
db.associated.find( { "diskinfo.physical.merror_count" : { $ne : 'Count: 509'}}).count()
// Result: 2, Expected: 2
db.associated.find( { "diskinfo.physical.merror_count" : { $ne : 'Count: 5'}}).count()
// Result: 2, Expected: 2
db.associated.find({“diskinfo.physical.merror_count”:{$ne:'count:0'}).count()
//结果:0,预期值:2
db.associated.find({“diskinfo.physical.merror_count”:{$ne:'count:509'}).count()
//结果:2,预期:2
db.associated.find({“diskinfo.physical.merror_count”:{$ne:'count:5'}).count()
//结果:2,预期:2
这些结果是正确的 您的期望可能基于嵌入数组中与谓词匹配的元素数。但是,满足查询的文档数量将返回 在第一种情况下,您查询的所有文档的diskinfo.physical.merror_计数不等于“计数:0”。每个文档都有diskinfo.physical.merror_计数,即“计数:0”,因此返回0 这样看,集合中的每个文档都有一个diskinfo.physical.merror_count值,它不是“count:0”。如果你用平等而不是不平等来提问,你会得到这三个答案 您是否正在尝试查找只有“计数:0”项的所有文档 似乎没有一种直接的方法可以做到这一点,但有一个查询可以让您了解这一点:
db.associated.find({“diskinfo.physical.merror_count”){$gt:'count:0'}).count()
如果计数实际上是整数,至少这是一个解决方案-它碰巧也适用于字符串,因为“1”>“0”等。另一个解决方案是使用:
find({“diskinfo.physical”:{$elemMatch:{merror_count:{$ne:'count:0'}})
这将匹配一个数组,其中只有一个项是$ne
。另一个优点是,您可以向匹配中添加更多运算符,以执行以下复杂操作:
查找({
'partners.id':'C30016',
“合作伙伴”:{$elemMatch:{
id:{$ne:'C30016'},
类型:“发货人”
}
}
})
(找到帐户“C30016”的所有合作伙伴,他们都是发货人)。虽然这是一个老问题,但我认为对于$ne和数组的语义,还有一些额外的解释
db.associated.find({"diskinfo.physical.merror_count" : "Count: 0"}).count()
返回3,因为数组“diskinfo.physical.merror_count”在集合的三个文档中包含值“count:0”
db.collection.find({a:v}).count() + db.collection.find({a:{$ne:v}}).count()
返回集合中元素的总数
db.associated.find({"diskinfo.physical.merror_count" : {$ne: "Count: 0"}}).count()
返回0,因为数组“diskinfo.physical.merror_count”在集合的3个文档中至少包含一次“count:0”