如何使用pymongo将新的值数组附加到mongodb中的现有数组文档中?

2024-10-02 12:26:34 发布

您现在位置:Python中文网/ 问答频道 /正文

如下所示的现有集合:

"_id" : "12345",
"vals" : {
        "dynamickey1" : {}
}

我需要补充一点

"vals" : {
            "dynamickey2" : {}
    }

我已经用pymongo 2.8在python 2.7中进行了尝试:

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" : {}
                 }

Tags: theidfield错误updatecolpushvalues
1条回答
网友
1楼 · 发布于 2024-10-02 12:26:34

编辑以下问题编辑:

两种选择;使用带有点符号的$set,或者使用python dict操作

第一种方法是MongoDB本地方法,只需一行代码;第二个是更多的工作,但如果您的用例更细致的话,它会提供更多的灵活性

方法1:

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))

方法2:

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);这是不允许的。~

所以无论你想做什么,都是行不通的

相关问题 更多 >

    热门问题