【发布时间】:2019-03-17 07:18:05
【问题描述】:
我正在尝试从集合(用户)中的文档中获取 id 数组,然后通过在另一个集合中找到具有该 id 的文档来获取他们的名称(好处)。
我已尝试阅读 $lookup,但文档令人困惑,因为它没有给出真实世界的示例。
这会返回用户的好处,我可以掌握。
Users.findOne({username: req.params.username},{benefits: 1, _id: 0 }, function(err, user) {
if(err)
console.log(err);
else
res.json(user);
});
这是一个包含 ID 数组的用户集合示例。
{
"_id" : ObjectId("5b997cf8082be41757b6d733"),
"username" : "anonuser",
"benefitsIds" : [
ObjectId("5ba8345f1e56fe8e6caaaa07"),
ObjectId("5ba706d64e82292e72e9ae71")
]
}
现在在另一个集合(好处)中,我有他们名字的好处。这是一个集合示例。
{
"_id" : ObjectId("5ba706d64e82292e72e9ae71"),
"benefit_name" : "Dental"
}
我只想返回实际的福利名称。
【问题讨论】:
-
编辑:与您在@chridam 发布的内容不完全相同。很难与我的例子联系起来。我正在寻找使用我的代码的示例,因为它与我可以搜索的任何内容都不相同。谢谢。
-
从答案中你可以推断出管道:
Users.aggregate([ { "$match": { "username" : req.params.username } }, { "$lookup": { "from": "benefits", "localField": "benefitsIds", "foreignField": "_id", "as": "benefits" } }, { "$project": { "benefits": "$benefits.benefit_name", "_id": 0 } } ], (err, result) => console.log(result)) -
谢谢!从 SQL 迁移到 Mongo 很有趣。
标签: mongodb mongoose mongodb-query mean-stack