2017-07-18 145 views
0

得到以下集合:「加入」 集合聚集

db.test.insert({ "DateID" : 2084, "DBFileID" : 105657, "Size_MB" : 1427 }); 
db.test.insert({ "DateID" : 2085, "DBFileID" : 105657, "Size_MB" : 1427 }); 
db.test.insert({ "DateID" : 2086, "DBFileID" : 105657, "Size_MB" : 1427 }); 
db.test.insert({ "DateID" : 2087, "DBFileID" : 105657, "Size_MB" : 1427 }); 
db.test.insert({ "DateID" : 2088, "DBFileID" : 105657, "Size_MB" : 1427 }); 
db.test.insert({ "DateID" : 2084, "DBFileID" : 105658, "Size_MB" : 3873 }); 
db.test.insert({ "DateID" : 2085, "DBFileID" : 105658, "Size_MB" : 3878 }); 
db.test.insert({ "DateID" : 2086, "DBFileID" : 105658, "Size_MB" : 3881 }); 
db.test.insert({ "DateID" : 2087, "DBFileID" : 105658, "Size_MB" : 3882 }); 
db.test.insert({ "DateID" : 2088, "DBFileID" : 105658, "Size_MB" : 3883 }); 
db.test.insert({ "DateID" : 2084, "DBFileID" : 105659, "Size_MB" : 3134 }); 
db.test.insert({ "DateID" : 2085, "DBFileID" : 105659, "Size_MB" : 3134 }); 
db.test.insert({ "DateID" : 2086, "DBFileID" : 105659, "Size_MB" : 3134 }); 
db.test.insert({ "DateID" : 2087, "DBFileID" : 105659, "Size_MB" : 3134 }); 
db.test.insert({ "DateID" : 2088, "DBFileID" : 105659, "Size_MB" : 3134 }); 
db.test.insert({ "DateID" : 2084, "DBFileID" : 105660, "Size_MB" : 1149 }); 
db.test.insert({ "DateID" : 2085, "DBFileID" : 105660, "Size_MB" : 1149 }); 
db.test.insert({ "DateID" : 2086, "DBFileID" : 105660, "Size_MB" : 1149 }); 
db.test.insert({ "DateID" : 2087, "DBFileID" : 105660, "Size_MB" : 1149 }); 
db.test.insert({ "DateID" : 2088, "DBFileID" : 105660, "Size_MB" : 1049 }); 
db.test.insert({ "DateID" : 2084, "DBFileID" : 105661, "Size_MB" : 107159 }); 
db.test.insert({ "DateID" : 2085, "DBFileID" : 105661, "Size_MB" : 107159 }); 
db.test.insert({ "DateID" : 2086, "DBFileID" : 105661, "Size_MB" : 107159 }); 
db.test.insert({ "DateID" : 2087, "DBFileID" : 105661, "Size_MB" : 107159 }); 
db.test.insert({ "DateID" : 2088, "DBFileID" : 105661, "Size_MB" : 107159 }); 

然後每DBFileID檢索最高DateID:

MongoDB Enterprise > db.test.aggregate([ { $group: {_id: "$DBFileID",lastDate: { $last: "$DateID" }}}]) 
{ "_id" : 105661, "lastDate" : 2088 } 
{ "_id" : 105657, "lastDate" : 2088 } 
{ "_id" : 105660, "lastDate" : 2088 } 
{ "_id" : 105658, "lastDate" : 2088 } 
{ "_id" : 105659, "lastDate" : 2088 } 

,這裏是結果集我想要的到底是:

{ "DateID" : 2088, "DBFileID" : 105657, "Size_MB" : 1427 } 
{ "DateID" : 2088, "DBFileID" : 105658, "Size_MB" : 3883 } 
{ "DateID" : 2088, "DBFileID" : 105659, "Size_MB" : 3134 } 
{ "DateID" : 2088, "DBFileID" : 105660, "Size_MB" : 1049 } 
{ "DateID" : 2088, "DBFileID" : 105661, "Size_MB" : 107159 } 

即檢索,爲每個DBFileID,它的Size_MB爲最高的DateID ...

我試圖得到這在一個單一的聚合+查詢查詢,但無濟於事...

有人可以幫助我嗎?

提前,謝謝! 問候, 的Seb在

  • 集團文件通過DBFieldID並選擇從每個組第一文件降序
  • 通過 DateID

    回答

    0
    1. 排序文檔(這將是具有最大DateID
    2. 項目結果到文檔得到你想要的領域

    查詢:

    db.test.aggregate([ 
        { $sort: { DateID: -1 }}, 
        { $group: {_id: "$DBFileID", doc: { $first: "$$ROOT" }}}, 
        { $project: { _id:0, DBFieldID: "$_id", DateID: "$doc.DateID", Size_MB: "$doc.Size_MB" }} 
    ]); 
    

    輸出:

    { "DBFieldID" : 105661, "DateID" : 2088, "Size_MB" : 107159 } 
    { "DBFieldID" : 105660, "DateID" : 2088, "Size_MB" : 1049 } 
    { "DBFieldID" : 105659, "DateID" : 2088, "Size_MB" : 3134 } 
    { "DBFieldID" : 105658, "DateID" : 2088, "Size_MB" : 3883 } 
    { "DBFieldID" : 105657, "DateID" : 2088, "Size_MB" : 1427 }