在 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"
}
})
我在 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"
}
})