如何使用 pymongo 将新的值数组附加到 mongodb 中的现有数组文档?
Posted
技术标签:
【中文标题】如何使用 pymongo 将新的值数组附加到 mongodb 中的现有数组文档?【英文标题】:How to append a new array of values to an existing array document in mongodb using pymongo? 【发布时间】:2020-10-15 23:01:35 【问题描述】:现有的集合如下:
"_id" : "12345",
"vals" :
"dynamickey1" :
我需要添加
"vals" :
"dynamickey2" :
我已经在 python 2.7 和 pymongo 2.8 中尝试过:
col.update('_id': id),'$push': 'vals': "dynamickey2":"values")
错误日志:
pymongo.errors.OperationFailure: The field 'vals' must be an array but is of type object in document
预期输出:
"_id" : "12345",
"vals" :
"dynamickey1" : ,
"dynamickey2" :
【问题讨论】:
你所谓的“现有数组文档”根本不是一个数组,而是一个哈希,所以你应该先修复它。 【参考方案1】:编辑以下问题编辑:
两个选项;使用带有点符号的 $set,或使用 python dict 操作。
第一种方法更 MongoDB 原生,是一行代码;第二个工作量更大,但如果您的用例更细致入微,则可以提供更多的灵活性。
方法一:
from pymongo import MongoClient
from bson.json_util import dumps
db = MongoClient()['mydatabase']
db.mycollection.insert_one(
"_id": "12345",
"vals":
"dynamickey1": ,
)
db.mycollection.update_one('_id': '12345','$set': 'vals.dynamickey2':)
print(dumps(db.mycollection.find_one(), indent=4))
方法二:
from pymongo import MongoClient
from bson.json_util import dumps
db = MongoClient()['mydatabase']
db.mycollection.insert_one(
"_id": "12345",
"vals":
"dynamickey1": ,
)
record = db.mycollection.find_one('_id': '12345')
vals = record['vals']
vals['dynamickey2'] =
record = db.mycollection.update_one('_id': record['_id'], '$set': 'vals': vals)
print(dumps(db.mycollection.find_one(), indent=4))
无论哪种方式都给出:
"_id": "12345",
"vals":
"dynamickey1": ,
"dynamickey2":
上一个答案
您的预期输出有一个包含重复字段的对象 (vals
);这是不允许的。~
所以无论你想做什么,它都行不通。
【讨论】:
以上是关于如何使用 pymongo 将新的值数组附加到 mongodb 中的现有数组文档?的主要内容,如果未能解决你的问题,请参考以下文章
Apache Spark 如何将新列从列表/数组附加到 Spark 数据帧
如何使用 php 类 DOMDocument 将新的 xml 节点附加到现有的 .xml 文件?