【发布时间】:2015-05-08 13:01:38
【问题描述】:
我有这种“评论”模型:
{ _id: <comment-id>,
user: {
id: { type: Schema.ObjectId, ref: 'User', required: true },
name: String
},
sharedToUsers: [{ type: Schema.ObjectId, ref: 'User' }],
repliedToUsers: [{ type: Schema.ObjectId, ref: 'User' }],
}
我想查询所有满足以下条件的 cmets:
- sharedToUsers 数组为空
- repliedToUsers 数组为空
而且,我希望结果按用户 ID 仅包含每个用户的 1 条评论(最新评论)。
我已尝试创建此聚合(Node.js、猫鼬):
Comment.aggregate(
{ $match: { "sharedToUsers": [], "repliedToUsers": [] } },
{
$group: {
_id: "$user.id",
user: { $first: "$user" },
}
},
function (err, result) {
console.log(result);
if (!err) {
res.send(result);
} else {
res.status(500).send({err: err});
}
});
其实是可以的,但是严重的问题是结果cmets_id字段被嵌套用户_id覆盖了。
如何保持聚合工作但不覆盖原始评论 _id 字段?
谢谢
【问题讨论】:
-
将评论
_id推送到组结果中,就像您对user所做的那样,例如comment_id : { "$first" : "$_id" }.