2017-10-10 47 views
0

我有一個文檔集合。每份文件都有一個修訂版,報價和各種其他屬性。我需要根據報價編號進行分組,然後選擇組中最新版本的單個文檔。示例4文件中的每一個都帶有引號12345和A-D,我需要「D」文件和所有其他文件以及最新的轉發給客戶。 我發現了一個類似的問題here,但不能讓它爲我工作。MongoDb:分組然後排序並取最後一個文檔

查詢

db.myCollection.aggregate([ 
{ "$group": { 
    "_id": "$quote", 
    "rev": { "$first":"$rev"} 
} 
]) 

收集

{ 
    "_id" : ObjectId("58b6054c17c2cd53cf4176fe"), 
    "rev" : "A", 
    "quote" : "12345", 
}, 
{ 
    "_id" : ObjectId("58b6085617c2cd53cf417710"), 
    "rev" : "B", 
    "quote" : "12345", 
}, 
{ 
    "_id" : ObjectId("58b6da4617c2cd53cf417728"), 
    "rev" : "C", 
    "quote" : "12345", 
}, 
{ 
    "_id" : ObjectId("58b6e5c317c2cd53cf417744"), 
    "rev" : "D", 
    "quote" : "12345", 
}, 
{ 
    "_id" : ObjectId("58b6f44917c2cd53cf41776e"), 
    "rev" : "A", 
    "quote" : "54321", 
}, 
{ 
    "_id" : ObjectId("58b6ffcb17c2cd53cf417788"), 
    "rev" : "B", 
    "quote" : "54321", 
} 
+0

您是否嘗試添加類似提到的其他答案?類似於'db.myCollection.aggregate([{「$ sort」:{「quote」:1,「rev」:1}}, {「$ group」:{ 「_id」:「$ quote」, 「rev」:{「$ last」:「$ rev」} } ]' – Veeram

+0

@Veeram確實返回了數據,但它只是_id和rev屬性。我如何獲取整個文檔? –

+0

嘗試'db.myCollection.aggregate([{「$ sort」:{「quote」:1,「rev」:1}},{「$ group」:{「_id」:「$ quote」,「data」 :{「$ last」:「$$ ROOT」}}])' – Veeram

回答

0

感謝@Veeram此解決方案。

db.myCollection.aggregate([{"$sort":{"quote":1, "rev":1 }}, { "$group": { "_id": "$quote", "data": { "$last":"$$ROOT"} } ]) 
相關問題