我的收藏中有很多测试文档,如下所示。
{
"_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天。
答案 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' }
} }
关闭聚合:
] );