我有一个猫鼬模式,用于保存用户之间的消息:
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
)获得相同的结果?