Javascript MongoDB-如何$slice子阵列

Javascript MongoDB-如何$slice子阵列,javascript,mongodb,pymongo,Javascript,Mongodb,Pymongo,给一份像这样的文件 { data:{ '2015':['a', 'b', 'c', ...], //<array of n datapoints> '2016':['d', 'e', 'f', ...], //<array of n datapoints> }, someOtherField: {...} } 查询返回整个数据字段。这是否意味着我不能$slice子阵列 获取数据.2015数组的$s

给一份像这样的文件

{
    data:{
        '2015':['a', 'b', 'c', ...],     //<array of n datapoints>
        '2016':['d', 'e', 'f', ...],     //<array of n datapoints>
    },

    someOtherField: {...}
}
查询返回整个
数据
字段。这是否意味着我不能
$slice
子阵列

获取
数据.2015
数组的
$slice
的正确方法是什么

解决方案

db.collection.find({}, {'data':0, 'someOtherField':0, 'data.2015':{'$slice': [3, 5]})

如果有人知道如何优雅地抑制allother
someOtherField
,这将改善它

$slice返回一个完整的数据字段,但带有一个slices数组

我设置了一个与您类似的环境,这就是我得到的

无切片:

> 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]}})

没错,数组已正确切片,但其他所有内容都已包含在内。添加{'data':0}解决了这个问题是的:)我刚刚编辑了我的答案,我建议添加
{'data.2015':1'}
,这样你只会得到数据。2015切片阵列实际上,你使用的双投影有错误?“TypeError:skip必须是int的实例”您第一次是对的@Pythonic。我有点糊涂了。实际工作的最后一个查询是:
db.collection.find({},{'data':0,'data.2015':{$slice:[0,2]})
answer edited。
> db.collection.findOne({}, {'data.2015' : {$slice: [0, 2]}})
{
    "_id" : ObjectId("584917b47778f75d3e0c96db"),
    "data" : {
        "2015" : [
            1,
            2
        ]
    }
}