2017-02-22 72 views
1

我想根據以下模式獲取我的集合中的特定條目。MongoDB查找具有不同字段的項目

它musst相同objectClassversion排序,以獲得最新的過濾,然後讓只objectId最新的(注:這不是項目ID!)

我已經嘗試了一些組合具有鮮明和組,但不得到它

集(歷史):

{ "_id" : ObjectId("AAA"), "objectId" : ObjectId("BBB"), "objectClass" : "AAA\BBB\CCC", "version" : NumberInt("1"), "fields" : {...} } 
{ "_id" : ObjectId("AAB"), "objectId" : ObjectId("BBB"), "objectClass" : "AAA\BBB\CCC", "version" : NumberInt("2"), "fields" : {...} } 
{ "_id" : ObjectId("AAC"), "objectId" : ObjectId("BBB"), "objectClass" : "AAA\BBB\CCC", "version" : NumberInt("3"), "fields" : {...} } 
{ "_id" : ObjectId("AAD"), "objectId" : ObjectId("BBA"), "objectClass" : "AAA\BBB\CCC", "version" : NumberInt("1"), "fields" : {...} } 
{ "_id" : ObjectId("AAE"), "objectId" : ObjectId("BBA"), "objectClass" : "AAA\BBB\CCC", "version" : NumberInt("2"), "fields" : {...} } 
{ "_id" : ObjectId("AAF"), "objectId" : ObjectId("BBA"), "objectClass" : "AAA\BBB\CCC", "version" : NumberInt("3"), "fields" : {...} } 

我現在聲明(不是返回預期的結果):

db.history.find({objectClass: "AAA\BBB\CCC"}).sort({version: -1}); 

預期結果:

[ 
    { "_id" : ObjectId("AAC"), "objectId" : ObjectId("BBB"), "objectClass" : "AAA\BBB\CCC", "version" : NumberInt("3"), "fields" : {...} } 
    { "_id" : ObjectId("AAF"), "objectId" : ObjectId("BBA"), "objectClass" : "AAA\BBB\CCC", "version" : NumberInt("3"), "fields" : {...} } 
] 

回答

1

我想你想使用聚合和管道在打了幾個電話。以下是我沒有測試過的查詢,但應該給你一個好主意。首先對文檔進行排序,然後按objectClass進行分組,然後僅爲其他字段獲取第一個值,最後將數據重新設置爲原始格式。

db.history.aggregate([ 
    { 
     "$match":{ "objectClass": "AAA\BBB\CCC" } 
    },{ 
     "$sort": {"version":-1} 
    },{ 
     "$group":{ 
      "_id":"$objectId", 
      "objectClass": {"$first": "$objectClass"}, 
      "version": {"$first": "$version"}, 
      "origId": {"$first": "$_id"}, 
      "fields": {"$first": "$fields"} 
     } 
    },{ 
     "$project":{ 
      "_id":"$origId", 
      "objectId": "$_id", 
      "objectClass":1, 
      "version": 1, 
      "fields": 1 
     } 
    } 
]) 
+0

您錯過了一個'}'和'$ mach',但工作很棒!謝謝! +1 –

+1

@JasonSchilling謝謝你指出我錯過了什麼。我回去修復查詢 – Woodsy

相關問題