在Mongodb中的多个文档中将具有匹配值的对象从数组中拉出

时间:2018-11-01 15:01:00

标签: mongodb-query

我在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”表示的地图中获取值?

0 个答案:

没有答案