我有一个看起来像的模型
{
"_id" : ObjectId("5b975b7ffb8361fa0cdacc41"),
"refid" : 1,
"item" : "xyz1",
"qnid" : 1
}
{
"_id" : ObjectId("5b975b7ffb8361fa0cdacc42"),
"refid" : 1,
"item" : "xyz2",
"qnid" : 2
}
{
"_id" : ObjectId("5b975b7ffb8361fa0cdacc43"),
"refid" : 1,
"item" : "xyz3",
"qnid" : 3
}
{
"_id" : ObjectId("5b975b7ffb8361fa0cdacc44"),
"refid" : 4,
"item" : "xyz4",
"qnid" : 4
}
{
"_id" : ObjectId("5b975b7ffb8361fa0cdacc45"),
"refid" : 4,
"item" : "xyz5",
"qnid" : 5
}
这里refid是文章的引用ID,qnid是实际的id版本。我想获取所有文章,即使用最新版本数据进行refid。
我想获得由refid汇总的最新记录
文章refid 1有qnid 3作为最近的一个。文章refid 4有qnid 5作为最近的一个。即
{
"_id" : ObjectId("5b975b7ffb8361fa0cdacc43"),
"refid" : 1,
"item" : "xyz3",
"qnid" : 3
}
{
"_id" : ObjectId("5b975b7ffb8361fa0cdacc45"),
"refid" : 4,
"item" : "xyz5",
"qnid" : 5
}
请帮帮我怎样才能做到这一点。我使用了具有排序的聚合函数,但它没有提供数据
您可以在3.4中使用以下聚合。
$sort
关于refid asc和qnid desc。
$group
由refid和$first
与$$ROOT
访问整个文件。
$replaceRoot
将数据推向了顶峰。
db.collection.aggregate([
{"$sort":{"refid":1,"qnid":-1}},
{"$group":{
"_id":"$refid",
"data":{"$first":"$$ROOT"}
}},
{"$replaceRoot":{"newRoot":"$data"}}
])