簡體   English   中英

我們如何在 mongodb 中找到每個組的最近記錄?

[英]How can we find the recent record from each group in mongodb?

我想找出每個組的最新記錄。 我的收藏:-

{ "_id" : ObjectId("1"), "loginID" : Ram.1234@gmail.com , "name" : Ram, "date" : ISODate("2017-02-01T00:00:00Z"),Site:blog.com,opertion:modified }
{ "_id" : ObjectId("2"), "loginID" : Arjun34@gmail.com, "name" : Arjun, "date" : ISODate("2017-02-01T00:00:00Z").site:ketanblog.com,opertion:updated }
{ "_id" : ObjectId("3"), "loginID" :Ram.1234@gmail.com , "name" : Ram, "date" : ISODate("2017-02-03T00:00:00Z"),Site:blogtec.com,opertion:modified }
{ "_id" : ObjectId("4"), "loginID" : Arjun34@gmail.com, "name" : Arjun, "date" : ISODate("2017-02-08T00:00:00Z"),Site:blogpec.com,opertion:updated }
{ "_id" : ObjectId("5"), "loginID" : Arjun34@gmail.com, "name" : Arjun, "date" : ISODate("2017-02-07T00:00:00Z") ,Site:blog.com,opertion:read}
{ "_id" : ObjectId("6"), "loginID" : shyam78@gmail.com, "name" : Shyam, "date" : ISODate("2017-02-09T00:00:00Z"),site:ketanblog.com,opertion:deleted }
{ "_id" : ObjectId("7"), "loginID" : shyam78@gmail.com, "name" : Shyam, "date" : ISODate("2017-02-03T00:00:00Z") ,site:ketanblog.com,opertion:updated}
{ "_id" : ObjectId("8"), "loginID" : Arjun34@gmail.com, "name" : Arjun, "date" : ISODate("2017-02-03T00:00:00Z"),Site:blogtrt.com,opertion:read  }

我預期的 output:-

{ "_id" : ObjectId("3"), "loginID" : Ram.1234@gmail.com, "name" : Ram, "date" : ISODate("2017-02-03T00:00:00Z"),Site:blogtec.com,opertion:modified  }
{ "_id" : ObjectId("4"), "loginID" : Arjun34@gmail.com, "name" : Arjun, "date" : ISODate("2017-02-08T00:00:00Z"),Site:blogpec.com,opertion:updated  }
{ "_id" : ObjectId("6"), "loginID" : shyam78@gmail.com, "name" : Shyam, "date" : ISODate("2017-02-09T00:00:00Z"),Site:ketanblog.com,opertion:deleted  }
  1. 按日期排序以將每個組的最新數據保留在頂部
  2. 按登錄ID分組,獲取每個組的第一條記錄,這是最新的。 它丟棄每個組中的其他記錄
db.coll.aggregate([
{
  $sort : {"$date": - 1}
}, 
{
 $group: {
   _id : "$loginID", 
  data : { 
    $first : "$$ROOT" 
  } 
 } 
}
])

你可以試試,

  • $sort按日期降序排序
  • $group by loginID並在recent添加第一個最近的文檔
  • $replaceRootrecent的替換為新的根
  • $sort新的分組文檔
db.collection.aggregate([
  { $sort: { date: -1 } },
  {
    $group: {
      _id: "$loginID",
      recent: { $first: "$$ROOT" }
    }
  },
  { $replaceRoot: { newRoot: "$recent" } },
  { $sort: { date: -1 } }
])

操場

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM