簡體   English   中英

如何使用 pymongo 將新的值數組添加到 mongodb 中的現有數組文檔中?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM