填充后的猫鼬组数据

时间:2019-09-19 14:39:10

标签: javascript node.js mongodb express 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)获得相同的结果?

0 个答案:

没有答案