MongoDB - 如何$切片子子阵列

时间:2016-12-08 08:14:13

标签: javascript mongodb pymongo

给出像

这样的文件
{
    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来改善它

1 个答案:

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