如何在 MongoDB 的嵌入式数组对象中插入 json 对象?

Posted

技术标签:

【中文标题】如何在 MongoDB 的嵌入式数组对象中插入 json 对象?【英文标题】:How to insert a json object inside embedded array object in MongoDB? 【发布时间】:2020-06-07 20:39:58 【问题描述】:

我在 MongoDB 中存储了以下文档:


    "_id": 2,
    "template_name": "AllahabadBank",
    "description": "Form For NewCustomer Application In Banking System",
    "handwritten": "true",
    "file_path": "./serverData/batchProcessedFiles/AllahabadBank/input",
    "annotated_data": [
        "page_num": "page-01.jpg",
        "entities": [
            "label": "CIFNo",
            "type": "text",
            "boundary_box": 
                "x1": 325,
                "x2": 861,
                "y1": 324,
                "y2": 360
            
        ],
    "num_of_pages": 12
  ]

并且想将下面的 JSON 数据插入到 annotated_data。建议我使用 MongoDB 查询或 Python 代码来执行此操作。


  "page_num": "page-02.jpg",
  "entities": [
    
      "label": "CustomerName",
      "type": "text",
      "boundary_box": 
        "x1": 559,
        "x2": 1615,
        "y1": 382,
        "y2": 440
      
    
  ]

【问题讨论】:

您的示例文档无效。请提供一个有效的。 【参考方案1】:

这可以使用更新查询来完成。 下面是使用 pymongo 更新它的 python 代码。将 __ colName __ 替换为您的列名。

__colName__.update('_id':2,
            '$push':'annotated_data':"page_num": "page-02.jpg",
        "entities": [
            "label": "CustomerName",
            "type": "text",
            "boundary_box": 
                "x1": 559,
                "x2": 1615,
                "y1": 382,
                "y2": 440
            
        ]
    )

上面的Mongo命令如下:

db.__colName__.update('_id':2,
            '$push':'annotated_data':"page_num": "page-02.jpg",
        "entities": [
            "label": "CustomerName",
            "type": "text",
            "boundary_box": 
                "x1": 559,
                "x2": 1615,
                "y1": 382,
                "y2": 440
            
        ]
    )

【讨论】:

【参考方案2】:

您可以通过两种方式做到这一点:

1) MongoDB更新方法

db.collection.update("_id":2,
  
  $push: 
    "annotated_data": 
      "page_num": "page-02.jpg",
      "entities": [
        
          "label": "CustomerName",
          "type": "text",
          "boundary_box": 
            "x1": 559,
            "x2": 1615,
            "y1": 382,
            "y2": 440
          
        
      ]
    
  
)

2) 将文档和append 检索到数组中(Python 代码)

doc = db.collection.find_one('_id':2)
doc["annotated_data"].append(
  "page_num": "page-02.jpg",
  "entities": [
     
       "label": "CustomerName",
       "type": "text",
       "boundary_box": 
          "x1": 559,
          "x2": 1615,
          "y1": 382,
          "y2": 440
       
    
  ]
)
db.collection.save(doc)

【讨论】:

以上是关于如何在 MongoDB 的嵌入式数组对象中插入 json 对象?的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB中的嵌入式数组插入

将对象数组插入 MongoDB

如何使用 mongoose 和 NodeJs 在 Mongodb 的数组字段中插入数据

在嵌套数组 mongodb nodejs 中插入对象

使用 Spring Data MongodB 更新嵌入式 mongodb 文档中的数组字段?

如何在 MongoDb 的嵌入式数组中查找多个元素