从mongodb中另一个数组字段中的数组元素中获取特定的数组元素

时间:2016-08-27 13:34:03

标签: arrays mongodb spring-data-mongodb bson

我的文档结构如下。

{
    "_id" : {
        "timestamp" : ISODate("2016-08-27T06:00:00.000+05:30"),
        "category" : "marketing"
    },
    "leveldata" : [ 
        {
            "level" : "manager",
            "volume" : [ 
                "45", 
                "145", 
                "2145"
            ]
        }, 
        {
            "level" : "engineer",
            "volume" : [ 
                "2145"
            ]
        }
    ]
}

“leveldata.volume”嵌入式数组文档字段中可以包含大约60个元素。

在这种情况下,“ leveldata ”是一个数组文档。

音量”是“ leveldata ”中的另一个数组字段。

我们需要从“volume”数组字段中获取特定元素。

例如,来自特定位置的元素,例如,数组元素“音量”中的位置 1-5

另外,在这种情况下,我们使用位置运算符来获取基于“leveldata.level”字段的特定数组元素。

我尝试使用 $ slice 运算符。但是,它似乎只适用于数组不在数组字段内的数组 就是我的情景。

我们可以从应用程序层执行此操作,但这意味着将整个数组元素从mongo db加载到内存和 然后获取所需的元素。我们希望避免这样做并直接从mongodb获取它。

以下查询是我用于根据需要获取元素的原因。

db.getCollection('mycollection').find(
{
    "_id" : {
          "timestamp" : ISODate("2016-08-26T18:00:00.000-06:30"),
          "category" : "sales"
    }
   ,
    "leveldata.level":"manager"
}, 
{
   "leveldata.$.volume": { $slice: [ 1, 5 ] }
}
)

能否请您告知我们有关如何解决此问题的建议。

谢谢,

mongouser

1 个答案:

答案 0 :(得分:0)

是的,您可以使用$slice获取数据,如

db.getCollection('mycollection').find({"leveldata.level":"manager"} , { "leveldata.volume" : { $slice : [3 , 1] } } )