我有一个用mongodb练习的聚会克隆。我对mongodb聚合的$lookup
阶段很感兴趣。我有一个非规范化的文档,如下所示:
{
_id: ObjectId(),
createdAt: ISODate(),
description: "Group for people who like kittens",
members: [ ObjectId(), ObjectId() ]
}
我的目标是从收藏集members
中查找users
并加入他们,就像这样:
{
_id: ObjectId(),
createdAt: ISODate(),
description: "Group for people who like kittens.",
members: [{
_id: ObjectId(),
name: "Jeff"
}, {
_id: ObjectId(),
name: "Tim"
}]
}
当我尝试在数组上执行$lookup
时,它不会产生任何结果,所以我$unwind
给了我几个我必须分组的文档。
db.meetups.aggregate([
{ $match: { "_id": id } },
{ $unwind: "$users" },
{
$lookup: {
from: "members",
localField: "users",
foreignField: "_id",
as: "members"
}
},
{
$group: {
_id: "$_id",
members: { $push: "$members" }
}
}
], /** ... */);
问题是这总是产生一个带有单个元素的数组,因为我只期望一个元素。我尝试使用$group
运算符,但它只是一个填充单个元素数组而不是一系列对象的数组
mongo 3.2是如何完成的?