我有一个看起来像的模型
{
"_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一起使用,但它没有提供数据
答案 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"}}
])