gpt4 book ai didi

mongodb - mongo $ne 查询数组未按预期工作

转载 作者:可可西里 更新时间:2023-11-01 09:07:48 25 4
gpt4 key购买 nike

我正在尝试使用如下插入的数据运行以下查询。无论出于何种原因,值中为 0 的 $ne 似乎都不起作用。我使用 v2.0.4 在 linux 和 mac 上都试过了。还使用 mongo shell 运行了这些。

有人有什么想法吗?这是错误还是我误解了什么?

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: 2db.associated.find( { "diskinfo.physical.merror_count" : { $ne : 'Count: 509'}}).count()// Result: 2, Expected: 2db.associated.find( { "diskinfo.physical.merror_count" : { $ne : 'Count: 5'}}).count()// Result: 2, Expected: 2

最佳答案

尽管这是一个老问题,但我认为仍然需要对 $ne 与数组的语义进行一些额外的解释。

  1. 众所周知,mongo 的行为具有以下形式的查询

    db.collection.find({a:v})

当 a 是一个数组时:它返回所有文档,使得(至少)数组键中的一个元素是 v。在示例中:

db.associated.find({"diskinfo.physical.merror_count" : "Count: 0"}).count()

返回 3,因为数组“diskinfo.physical.merror_count”在集合的三个文档中包含一个值“Count: 0”。

  1. 那么,似乎有理由(至少有可能)期待

    db.collection.find({a:{$ne:v}})

    将返回 a 包含与 v 不同的内容的文档。但是,这不是 Mongo 中的行为。相反,使用 $ne 表示仅选择其数组 a 不包含 v 的那些文档

这种语义在开始时可能看起来很奇怪,但如果我们以这种方式考虑表达式:

 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”。

关于mongodb - mongo $ne 查询数组未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10907843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com