在mongodb中具有多个条件的$ group

时间:2016-03-16 12:49:26

标签: mongodb aggregation-framework

我的收藏中有很多测试文档,如下所示。

{
    "_id" : ObjectId("56e2c5a0d36c55593b74ada5"),
    "priority" : "P1",
    "key" : "IN94909",
    "days" : 21.8344046180556
}

{
    "_id" : ObjectId("56e2c5a0d36c55593b74ada5"),
    "priority" : "P2",
    "key" : "IN94904",
    "days" : 35.8344046180556
}

{
    "_id" : ObjectId("56e2c5a0d36c55593b74ada5"),
    "priority" : "P3",
    "key" : "IN95409",
    "days" : 5.8344046180556
}

我希望所有文档按" P1"," P2"分组。和" P3"只有"天"已经超过了一些SLA。现在,对于P1,P2和P3,SLA是不同的。

我的结果集应该只包含超过SLA的结果集。假设P1的SLA为5天,P2为10天,P3为15天。

1 个答案:

答案 0 :(得分:3)

最好通过聚合系统完成。

第一步是选择SLA已过期的所有文档:

db.collection.aggregate( [
    { $match: { $or: [
        { priority: 'P1', days : { $gt: 5 } },
        { priority: 'P2', days : { $gt: 10 } },
        { priority: 'P3', days : { $gt: 15 } }
    ] } },

然后,您可以按小组阶段按每个优先级进行分组:

    { $group: {
        _id: '$priority',

并添加每个文档:

        docs: { $push: '$$ROOT' }
    } }

关闭聚合:

] );