给出像
这样的文件{
data:{
'2015':['a', 'b', 'c', ...], //<array of n datapoints>
'2016':['d', 'e', 'f', ...], //<array of n datapoints>
},
someOtherField: {...}
}
我试图以下列方式查询data
中某个数组的切片:
db.collection.find({}, {'data.2015':{'$slice': [3, 5]})
查询返回整个data
字段。这是否意味着我不能$slice
一个子子阵列?
获取$slice
数组data.2015
的正确方法是什么?
解决方案
db.collection.find({}, {'data':0, 'someOtherField':0, 'data.2015':{'$slice': [3, 5]})
如果有人知道如何优雅地压制所有其他someOtherField
来改善它
答案 0 :(得分:1)
$ slice返回整个数据字段,但是使用切片数组。
我为你设置了类似的环境,这就是我得到的。
没有切片:
> db.collection.findOne({})
{
"_id" : ObjectId("584917b47778f75d3e0c96db"),
"data" : {
"2015" : [
1,
2,
3,
4,
5,
6,
7,
8
]
}
}
使用切片:
> db.collection.findOne({}, {'data.2015' : {$slice: [0, 2]}})
{
"_id" : ObjectId("584917b47778f75d3e0c96db"),
"data" : {
"2015" : [
1,
2
]
}
}
它返回整个数据对象,包括它可能具有的其他字段,但2015数组是从0元素加上2开始拼接。
如果您只想从数据中获取2015年数组,则可以执行以下查询:
> db.collection.find({}, {'data': 0, 'data.2015' : {$slice: [0, 2]}})