【问题标题】:Select Key from MongoDB key value pair从 MongoDB 键值对中选择键
【发布时间】:2020-03-27 17:28:06
【问题描述】:

我正在尝试在两个集合之间对 MongoDb 执行查找,其中一个字段作为属性作为键值对,我必须只选择键作为我的本地字段参数。

Json 示例:

下面json的key

{    "distributions" : {
        "5cf88" : "5d023d4aa", 
        "5cfaca42e" : "5d0093a", 
        "5d023d490d" : "5d22abc69093a"
    }
}

以下json的_id字段:

{ 
    "_id" : "5d22abc69093a", 
    "activatedBy" : {
        "id" : "5bc53813055aec", 
        "name" : "Test1", 
        "roles" : [
            "root"
        ]
    }
}

查询查询:

$lookup: {
        from: 'collecection1',
        localField: 'distributions.key',
        foreignField: '_id',
        as: 'Join'
    }

如何获取它们用于查找的键表单分布,因为我只需要键作为我的连接参数?

【问题讨论】:

    标签: mongodb mongodb-query aggregation-framework


    【解决方案1】:

    如何根据需要获取用于查找的关键表单分布 作为我的加入参数的唯一键?

    这个聚合查询可以使用 $objectToArray 聚合运算符来做到这一点:

    db.collection1.aggregate( [
     { $addFields: { fieldNameValues: { $objectToArray: "$$ROOT" } } },
     { $unwind: "$fieldNameValues" },
     { $match: { $expr: { $eq: [ { $type: "$fieldNameValues.v" } , "object" ] } } },
     { $addFields: { objs: { $objectToArray: "$fieldNameValues.v" } } },
     { $unwind: "$objs" },
     { $project: { distributions: "$objs"  } },
     { $lookup: {
            from: 'collection2',
            localField: 'distributions.v',
            foreignField: '_id',
            as: 'Join'
       }
     }
    ] )
    


    地点:

    collection1

    { "distributions" : {
            "5cf88" : "5d023d4aa", 
            "5cfaca42e" : "5d0093a", 
            "5d023d490d" : "5d22abc69093a"
        }
    }
    

    collection2

    { 
        "_id" : "5d22abc69093a", 
        "activatedBy" : {
            "id" : "5bc53813055aec", 
            "name" : "Test1", 
            "roles" : [
                "root"
            ]
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-27
      • 1970-01-01
      • 2021-02-19
      • 1970-01-01
      相关资源
      最近更新 更多