агрегация mongodb для поиска последних данных - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть модель, которая выглядит как

{
"_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 - это ссылочный идентификатор для статьи, а qnid - это фактический идентификатор, который содержит версию. я хочу получить все статьи, т. е. перефразировать данные последних версий.

я хочу получить последние записи, агрегированные по 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
}

Пожалуйста, помогите мне, как я могу это сделать. Я использовал агрегатную функцию с сортировкой, но она не дает данных

1 Ответ

0 голосов
/ 12 сентября 2018

Вы можете использовать ниже агрегации в 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"}}
])
...