mongodb:按索引或其他字段进行数组过滤

时间:2016-05-11 06:04:00

标签: mongodb

过滤数组时,是否可能:

  1. 按项目索引过滤(例如,获取所有数组元素,但第一个)?

  2. 在包含数组字段的同一文档中的另一个字段中按值过滤?

  3. 考虑文件:

    {
       _id: 1,
       first_seen_on: 20160312,
       seen_on: [20160312, 20160313, 20160324]
    }
    

    我需要seen_on数组成为[20160313,20160324]

    这似乎不起作用(我认为$first_seen_on被视为字面值):

            'repeats': {
                '$filter': {
                    'input': '$seen_on', 
                    'as': 'date', 
                    'cond': {'$ne': ['$date', '$first_seen_on']}
                }
    

1 个答案:

答案 0 :(得分:1)

使用 $setDifference ,如下所示

db.collection.aggregate([
    {
        "$project": {
            "repeats": {
                "$setDifference": ["$seen_on", ["$first_seen_on"]]
            }
        }
    }
])

示例输出

/* 1 */
{
    "_id" : 1,
    "repeats" : [ 
        20160313, 
        20160324
    ]
}