MongoDB中的规范化对象和数组

Posted

技术标签:

【中文标题】MongoDB中的规范化对象和数组【英文标题】:Normalized Object and array in MongoDB 【发布时间】:2021-05-31 04:46:51 【问题描述】:
[
  
    "data": 
      "id": "123",
      "name": "delta1"
    ,
    "property_data": [
      
        "ser_name": "Insights",
        "ser_value": "10000"
      ,
      
        "ser_name": "plans",
        "ser_value": "50000"
      
    ]
  
]

解释property_data 是一个数组。 data 是一个对象。需要将 Array 转换为对象,但问题是如果我在 property_data 上执行 $unwind,我会得到多次 data 对象,而我只需要一次。我想将我的数据结构转换为多个文档,但 data 不应该一次又一次地重复

预期输出

[
  
    "property_data": 
     "id": "123",
      "name": "delta1"
    
  ,
  
    "property_data": 
      "ser_name": "Insights",
      "ser_value": "10000"
    
  ,
  
    "property_data": 
      "ser_name": "plans",
      "ser_value": "50000"
    
  ,
]

【问题讨论】:

【参考方案1】:

这可以通过一些基本的结构操作来实现,如下所示:

db.collection.aggregate([
  
    $project: 
      property_data: 
        "$concatArrays": [
          "$property_data",
          [
            "$data"
          ]
        ]
      
    
  ,
  
    $unwind: "$property_data"
  ,
  
    $replaceRoot: 
      newRoot: 
        property_data: "$property_data"
      
    
  
])

Mongo Playground

【讨论】:

以上是关于MongoDB中的规范化对象和数组的主要内容,如果未能解决你的问题,请参考以下文章

数组和对象中的尾随逗号是规范的一部分吗?

数组和对象中的尾随逗号是规范的一部分吗?

MongoDB 聚合错误:管道阶段规范对象必须只包含一个字段

将对象数组传递给 Vue 规范中的数据对象

按 id 规范化对象数组和键

将 Array 结构规范化为 mongoDB 中的多个文档