用于查找最近数据的mongodb聚合

问题描述 投票:2回答:1

我有一个看起来像的模型

{
"_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
}

请帮帮我怎样才能做到这一点。我使用了具有排序的聚合函数,但它没有提供数据

mongodb find aggregation-framework aggregate
1个回答
2
投票

您可以在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"}}
])
© www.soinside.com 2019 - 2024. All rights reserved.