gpt4 book ai didi

MongoDB 查询产生 OR 响应而不是 AND

转载 作者:IT老高 更新时间:2023-10-28 13:27:05 26 4
gpt4 key购买 nike

我使用的是 MongoDB 版本 2.6.5,我有一个看起来像这样的集合:

{
"_id": ObjectId("555a3398f4c572a44f877dcd"),
"created": ISODate("2015-05-18T17:02:14.951Z"),
"values": [
{
"value": "4",
"label": "Apple"
},
{
"value": "5",
"label": "Peach"
},
{
"value": "5",
"label": "Banana"
},
{
"value": "4",
"label": "Orange"
}
],
"__v": 0
}
{
"_id": ObjectId("555a74dbdfe135105faccdf7"),
"created": ISODate("2015-05-18T21:27:37.064Z"),
"values": [
{
"value": "2",
"label": "Apple"
},
{
"value": "3",
"label": "Peach"
},
{
"value": "4",
"label": "Banana"
},
{
"value": "5",
"label": "Orange"
}
],
"__v": 0
}
{
"_id": ObjectId("555a74f9dfe135105faccdfa"),
"created": ISODate("2015-05-18T21:27:37.064Z"),
"values": [
{
"value": "1",
"label": "Apple"
},
{
"value": "1",
"label": "Peach"
},
{
"value": "1",
"label": "Banana"
},
{
"value": "1",
"label": "Orange"
}
],
"__v": 0
}

当我尝试获取 values.label 为“Orange”且 values.value 为“5”的文档时,我应该取回一份文档,但我得到两个:

> db.answers.count({ 'values.label':'Orange', 'values.value':'5' })
> 2

这是选择两个具有 id 的文档:555a3398f4c572a44f877dcd(可能是因为 Banana 的值也为 5)和 555a74dbdfe135105faccdf7(即唯一正确的)。谁能想到为什么会这样?

最佳答案

您正在使用 dot notation (用于进入 objects)在一个数组上。虽然这以您描述的方式工作,但它确实暗示了 OR 逻辑,因为可以说整个数组被解释为一个对象。

您正在寻找匹配数组中文档的多个条件,这就是$elemMatch operator 的内容。是为了,即

db.answers.count({ 'values' : { '$elemMatch' : { 'label':'Orange', 'value':'5' } } })

关于MongoDB 查询产生 OR 响应而不是 AND,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30628649/

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