我的文档结构如下。
{
"_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
答案 0 :(得分:0)
是的,您可以使用$slice
获取数据,如
db.getCollection('mycollection').find({"leveldata.level":"manager"} , { "leveldata.volume" : { $slice : [3 , 1] } } )