Данные группы Мангуста после заполнения - PullRequest
2 голосов
/ 19 сентября 2019

У меня есть схема mongoose, которая хранит сообщения между пользователями:

const messageSchema = mongoose.Schema({
    message:{ type: String },
    sender: { type: mongoose.Schema.Types.ObjectId, ref: 'User'},
    recipient: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }
  },
  {
    timestamps: true
});

Я пытаюсь:

  • .find() все сообщения, отправленные пользователю
  • .populate() поле отправителя из User схемы
  • .group() сообщений sender.username (username заполняется с User)
  • возвращает только самые последние(по дате тега) сообщение на отправителя

В настоящее время я делаю следующее:

let inbox = [];
let usercount = {};

await Messages.find({recipient: req.params.id})
    .populate('sender')
    .sort({updatedAt: -1})
    .lean()
    .then(messages => {
        messages.forEach(message => {
            let m = {
                username: message.sender.username,
                message: message.message
            }
      if (!usercount[message.sender.username]) inbox.push(m);
      usercount[message.sender.username] = 1;
        })
    });

console.log(inbox);

, который дает мне массив, содержащий самое последнее сообщение, отправленное каждым username,Однако для этого требуется две итерации: один раз над всем документом сообщения и снова над возвращенным объектом.

Есть ли способ достичь того же результата, используя .aggregate() & group)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...