合并数组中的两个对象,其中一个对象的键嵌套比另一个对象更深,位于 Mongo DB 的同一文档中

Posted

技术标签:

【中文标题】合并数组中的两个对象,其中一个对象的键嵌套比另一个对象更深,位于 Mongo DB 的同一文档中【英文标题】:Merge two objects inside an array, one with a key nested deeper than the other in the same document in Mongo DB 【发布时间】:2021-06-16 05:44:50 【问题描述】:

文档架构

id是加入的关键

 
    "foo" : [
        
            "properties" : 
                "id" : 1
            , 
        , 
        
            "properties" : 
                "id" : 2
            , 
        ], 
    "bar" : [
        
            "id" : 1,
            "metadata" : abc 
        ,
        
            "id" : 2,
            "metadata" : def 
        
    ]

目标

  
    "foo" : [
        
            "properties" : 
                "id" : 1,
                "metadata" : abc 
            , 
        , 
        
            "properties" : 
                "id" : 2,
                "metadata" : def 
            , 
        , 

【问题讨论】:

【参考方案1】:

您可以在架构上使用 $lookup,并在 $unwind 和 $project 的帮助下获得所需的结果。

查询:

db.foo.aggregate(
  $lookup: 
    from: "bar",
    localField: "properties.id",
    foreignField: "id",
    as: "properties"
  ,
  
,

  $unwind: 
    path: "$properties",
    
  
,

  $project: 
    _id: 0,
    properties: 1
  
)

输出:

[
  
    "properties": 
      "_id": ObjectId("5a934e000102030405000000"),
      "id": 1,
      "metadata": "abc"
    
  ,
  
    "properties": 
      "_id": ObjectId("5a934e000102030405000001"),
      "id": 2,
      "metadata": "def"
    
  
]

【讨论】:

以上是关于合并数组中的两个对象,其中一个对象的键嵌套比另一个对象更深,位于 Mongo DB 的同一文档中的主要内容,如果未能解决你的问题,请参考以下文章