2017-07-18 136 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 }