gpt4 book ai didi

mongodb - 查询类似对象的 MongoDB 数组

转载 作者:可可西里 更新时间:2023-11-01 10:20:00 25 4
gpt4 key购买 nike

我必须使用旧的 MongoDB,其中一个集合中的对象结构如下。

{
"_id": ObjectId("57fdfcc7a7c81fde38b79a3d"),
"parameters": [
{
"key": "key1",
"value": "value1"
},
{
"key": "key2",
"value": "value2"
}
]
}

问题是参数是一个对象数组,这使得高效查询变得困难。可以有大约 50 个不同的对象,它们都具有 "key""value" 属性。是否可以进行查询,查询目标是一个对象内的 "key""value"?我试过了

db.collection.find({$and:[{"parameters.key":"value"}, {"parameters.value":"another value"}]})

但是这个查询命中了 parameters 数组中的所有对象。

编辑 Nikhil Jagtiani找到 solution对于我原来的问题,但实际上我应该能够查询以参数数组中的多个对象为目标。例如。检查参数数组中两个不同对象中的键和值。

最佳答案

请引用下面的mongo shell聚合查询:

db.collection.aggregate([
{
$unwind:"$parameters"
},
{
$match:
{
"parameters.key":"key1",
"parameters.value":"value1"
}
}

])

1) 第 1 阶段 - Unwind :从输入文档中解构一个数组字段,为每个元素输出一个文档。每个输出文档都是用元素替换数组字段值的输入文档。

2) 第 2 阶段 - Match : 过滤文档以仅将符合指定条件的文档传递到下一个管道阶段。

如果没有聚合,即使一个子文档匹配,查询也会返回整个文档。 此管道将只返回所需的子文档。

编辑:如果需要指定多个键值对,我们需要的是参数字段$in。

db.collection.aggregate([{$unwind:"$parameters"},{$match:{"parameters":{$in:[{ "key" : "key1", "value" : "value1"},{ "key" : "key2", "value" : "value2" }]}}}])

将匹配以下两对键值作为子文档:

1) { "key": "key1", "value": "value1"}

2) { "key": "key2", "value": "value2"}

关于mongodb - 查询类似对象的 MongoDB 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40101409/

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