给出类似下面的时间序列文件
{
data:{
'2015':['a', 'b', 'c', ...], //<array of n datapoints>
'2016':['d', 'e', 'f', ...], //<array of n datapoints>
},
otherFieldA: {...}
otherFieldB: {...}
}
要获得2015
切片,我会使用以下预测here:
myProjection = {'data':0, 'otherFieldA':0, 'otherFieldB':0, 'data.2015':{'$slice': [3, 5]}}
db.collection.find({}, myProjection)
现在让我们假设我也想要得到2016
的全部
选项A :在上面的投影中添加'data.2016':1
会产生经典的inclusion + exclusion mongo错误
选项B :向投影$slice
添加另一个'data.2016':{'$slice': <len of data.2016>}
,但可能效率低,因为mongo需要向下滚动data.2016
数组而不只是挖出整个阵列。另外,我需要知道data.2016
的长度,这不是给定的
是否有第三个选项可以获得data.2015
和data.2016
的所有内容,同时排除所有otherField
值?
答案 0 :(得分:1)
您可以使用$ project:
使用聚合框架执行此操作db.collection.aggregate([
{
$project:{
"data.2015":{
$slice:[
"$data.2015",
1,
1
]
},
"data.2016":"$data.2016"
}
}
])
输出将是:
{
"_id":ObjectId("58492f23f2e6a23e2168649d"),
"data":{
"2015":[
"b"
],
"2016":[
"d",
"e",
"f"
]
}
}