在 MongoDB 中查找最新对象

Find Latest Object in MongoDB

我在 MongoDB 中有以下形式的数据:

 {
            "_id" : 154,
            "record_id" : "001280000033x54AAA",
            "jsonData" : "",
            "user_id" : 1,
            "userName" : "abc@xyz.com",
            "backup_no" : 1
 }


 {
            "_id" : 155,
            "record_id" : "001280000033x54AAA",
            "jsonData" : "",
            "user_id" : 1,
            "userName" : "abc@xyz.com",
            "backup_no" : 2
 }
  ...

我想检索基于 'user_id'、'userName' 的数据,但是如果具有相同 record_id 的记录存在于较低的 'backup_no' 中,那么我需要选择记录最高 backup_no.

我曾尝试汇总 record_id 的数据然后进行查询,但我无法找到解决方案。

谢谢

db.collection.aggregate([{
  $group: {
    _id: "$record_id",
    user_id: {
      $last: "$user_id"
    },
    userName: {
      $last: "$userName"
    },
    backup_no: {
      $max: "$backup_no"
    }
  }
}])

您可以简单地按 backup_no 降序排序,然后忽略除每个不同 record_id?
的第一条记录以外的所有记录 MongoDB $orderby

db.users.find( { } ).sort( { backup_no: -1 } );

使用 mongo aggregation 您可以在以下查询中查看结果:

db.collectionName.aggregate({
  "$sort": {
    "backup_no": -1 //first sort by backup_no 
  }
}, {
  "$group": {
    "_id": "$record_id", // group by record_id so here only get distinct record_id
    "userId": {
      "$first": "$user_id"
    },
    "userName": {
      "$first": "$userName"
    },
    "backup_no": {
      "$first": "$backup_no"
    }
  }
}, {
  "$project": {
    "_id": 0,
    "record_id": "$_id",
    "user_id": "$user_id",
    "userName": "$userName",
    "backup_no": "$backup_no"
  }
})