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

Arrays 从mongodb中另一个数组字段中的数组元素中获取特定数组元素,arrays,mongodb,spring-data-mongodb,bson,Arrays,Mongodb,Spring Data Mongodb,Bson,我的文档结构如下 { "_id" : { "timestamp" : ISODate("2016-08-27T06:00:00.000+05:30"), "category" : "marketing" }, "leveldata" : [ { "level" : "manager", "volume" : [ "45",

我的文档结构如下

{
    "_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”是一个数组文档

而“volume”是“leveldata”内的另一个数组字段

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

例如,来自特定位置的元素,例如,数组元素“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

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

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

谢谢查询将获取“工程师”和“经理”级别的数据。它应该只选择“级别”字段与值“管理器”匹配的元素。这就是我在查询中使用位置运算符作为“leveldata.$.volume”的原因。