mongodb聚合以查找最新数据

时间:2018-09-12 08:49:09

标签: mongodb find aggregation-framework aggregate

我有一个看起来像的模型

{
"_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 1的最新编号为qnid 3。 article refid 4最近有qnid 5个。 即

{
"_id" : ObjectId("5b975b7ffb8361fa0cdacc43"),
"refid" : 1,
"item" : "xyz3",
"qnid" : 3
}
{
"_id" : ObjectId("5b975b7ffb8361fa0cdacc45"),
"refid" : 4,
"item" : "xyz5",
"qnid" : 5
}

请帮助我该怎么做。 我将聚合函数与sort一起使用,但它没有提供数据

1 个答案:

答案 0 :(得分: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"}}
])