[英]How to append a new array of values to an existing array document in mongodb using pymongo?
一個現有的集合,如下所示:
"_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
預期 Output:
"_id" : "12345",
"vals" : {
"dynamickey1" : {},
"dynamickey2" : {}
}
編輯以下問題編輯:
兩種選擇; 使用帶有點符號的 $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": {}
}
}
上一個答案
您預期的 output 有一個 object 具有重復字段(
vals
);
這是不允許的~
所以無論你想做什么,它都行不通。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.