2016-03-16 66 views
-1

我在我的收藏中有很多像下面這樣的測試文檔。

{ 
    "_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

您能否簡單說明'P0的SLA爲5天,P1爲10天,P3爲15天。 – zangw

+0

對不起,我沒有看到關於這個問題的不清楚。這對我來說非常有意義,我的回答正是發佈的想法。 – Derick

回答

2

這最好通過聚合系統完成。

的第一步是選擇所有文件,其中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' } 
    } } 

,並關閉聚合:

]); 
+0

真棒Derick!這正是我所期待的,它解決了我的問題。對不起,如果我的問題不清楚,但你回答得很直白! – svg

+0

@ user2983266,你似乎是StackOverflow的新手。一般來說,如果你認爲和回答回答你的問題,你應該「接受」它(用大勾)。 – Derick

+0

是的,最近開始積極使用它!現在我已經接受了,謝謝! – svg