从 MongoDB 文档中获取 ID,然后从另一个文档中获取它们的相关值

Posted

技术标签:

【中文标题】从 MongoDB 文档中获取 ID,然后从另一个文档中获取它们的相关值【英文标题】:Get ID's from MongoDB document then get their related values from another 【发布时间】: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 很有趣。 【参考方案1】:
db.users.aggregate(

    // Pipeline
    [
        // Stage 1
        
            $unwind: 
                path: "$benefitsIds"

            
        ,

        // Stage 2
        
            $lookup: // Equality Match
            
                from: "benefits",
                localField: "benefitsIds",
                foreignField: "_id",
                as: "benefits"
            


        

    ]



);

【讨论】:

以上是关于从 MongoDB 文档中获取 ID,然后从另一个文档中获取它们的相关值的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 上按 ID 获取 MongoDB 文档

从MongoDB集合的文档中获取满足条件的元素?

如何从另一个数组中获取具有批准 ID 的项目?地图()过滤器()还是?

在通过流星的发布方法提供数据之前从另一个 mongodb 集合中添加信息

从 MongoDB 集合中的特定文档开始获取“n”个文档

如何将 MongoDB 子文档 _id 与 EJS 一起使用