我在mongodb中有许多以下格式的文档。
{
"_id":"id1",
"name1":"value1",
"name2":"value2",
"name3":"value3-1",
"measurementValues": [
{
"name":"aaa",
"value":"value for aaa 1"
},
{
"name":"bbb",
"value":"value for bbb 1"
},
{
"name":"ccc",
"value":"value for ccc 1"
}
]
},
{
"_id":"id2",
"name1":"value1",
"name2":"value2",
"name3":"value3-2",
"measurementValues": [
{
"name":"aaa",
"value":"value for aaa 2"
},
{
"name":"bbb",
"value":"value for bbb 2"
},
{
"name":"ccc",
"value":"value for ccc 2"
}
]
},
{
"_id":"id3",
"name1":"value1",
"name2":"value2",
"name3":"value3-3",
"measurementValues": [
{
"name":"aaa",
"value":"value for aaa 3"
},
{
"name":"bbb",
"value":"value for bbb 3"
},
{
"name":"ccc",
"value":"value for ccc 3"
}
]
}
在一个理想的世界中,我希望有一个使用此数据的查询
{
"name1":"value1",
"name2":"value2",
"measurementValues.name":"bbb"
}
并返回以下内容。
{
"name1":"value1",
"name2":"value2",
"name":"bbb",
"measurementValues": [
{
"name3":"value3-1",
"value":"value for bbb 1"
},
{
"name3":"value3-2",
"value":"value for bbb 2"
},
{
"name3":"value3-3",
"value":"value for bbb 3"
},
]
}
现在我正在搜索以下内容,并拉回所有文档并以编程方式生成结果,但是这需要很长时间和大量内存,因为现在有40万个文档并且还在不断增长。还有许多测量值。我尝试引入的平均结果集约为5k。
{
"name1":"value1",
"name2":"value2"
}
像这样的事情是否有可能或更接近我?只需单独获取bbb的测量值列表即可。
如果可能,我可以对原始文档进行较小的更改。
谢谢您的建议。
更新
我越来越近了。如果我使用查询
[
{
$group: {
_id: {
name1: "$name1",
name2: "$name2",
name: "bbb"
},
depthValues: {
$push: {
name3: "$name3",
value: "Value of bbb"
}
}
}
}
]
我可以得到。
{
"_id":{
"name1":"value1",
"name2":"value2",
"name":"bbb",
"measurementValues":[
{
"name":"value3-1",
value: "Value of bbb"
},
{
"name":"value3-2",
value: "Value of bbb"
},
{
"name":"value3-3",
value: "Value of bbb"
}
]
}
}
这真的很近。我只是在measurementValues中缺少“ bbb”的值。
我正在寻找的是
{
"_id":{
"name1":"value1",
"name2":"value2",
"name":"bbb",
"measurementValues":[
{
"name":"value3-1",
"value": "value for bbb 1"
},
{
"name":"value3-2",
"value": "value for bbb 2"
},
{
"name":"value3-3",
"value": "value for bbb 3"
}
]
}
}
如何在以“ bbb”表示的地图中获取值?