Найдите последний документ из массива документов с разными значениями с помощью Mongoose - PullRequest
1 голос
/ 19 июня 2020

У меня есть массив значений, которые я использую для запроса некоторых данных. Мне нужно получить последний документ каждого значения в массиве. Я предпочитаю объяснять код:

Схема:

const quizResultSchema = new mongoose.Schema({
  _id: mongoose.Schema.Types.ObjectId,
  answeredByUser: { type: mongoose.Schema.Types.ObjectId, ref: 'User' },
  created: { type: Date, default: Date.now },
  levelAnswered: { type: mongoose.Schema.Types.ObjectId, ref: 'QuizLevel' },
});

контроллер:

QuizResult.find(
    {
      levelAnswered: { $in: levelIds },
      answeredByUser: result.applicant._id,
    },
    {},
    { sort: { created: -1 } }
  )

levelIds - это массив идентификаторов, и я использую его для возврата массив документов. Проблема в том, что я получаю все документы для каждого идентификатора в массиве, отсортированные по дате. Мне нужно получить последний созданный документ, а не все документы для каждого идентификатора.

Как я могу это сделать? Можно ли сделать это только с Пн goose?

1 Ответ

1 голос
/ 19 июня 2020

Это можно сделать, сгруппировав и используя $ last , например:

db.collection.aggregate([
    {
        $match:{
            levelAnswered: { $in: levelIds },
            answeredByUser: result.applicant._id,
        }
    },
    {
        $group: {
            _id: "$levelAnswered",
            last: {$last: "$$ROOT"}
        }
    },
    {
        $replaceRoot: {
            newRoot: "$last"
        }
    }
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...