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”的原因。