免责声明:Python和CouchDB的是新的我。到目前为止,我的“编程”大多由Bash脚本的。
我试图创建一个小的脚本,在CouchDB中更新数据库对象。然而,没有被我的剧本,但通过一个应用程序创建的对象称为使用CouchDB的sync用自来水形式。基本上我试图自动更新应用程序的内容。这也意味着我无法真正影响结构或CouchDB中的对象的名称。
该数据库主要是充满了这种结构的对象:
{
"_id": "rec-3b17...",
"_rev": "21-cdf6...",
"values": {
"fld-c3d4...": 4,
"fld-1def...": 1000000000000,
"fld-bb44...": 760000000000,
"fld-a44f...": "admin,name",
"fld-5fc0...": "SSD",
"fld-642c...": true,
},
"deviceName": "MacBook Air",
"dateModified": "2019-02-08T14:47:06.051Z",
"dateCreated": "2019-02-08T11:33:00.018Z",
"type": "frm-7ff3...",
"dbID": "db-1435...",
"form": "frm-7ff3..."
}
我缩短了数了一下,去掉了一些项目,以增加可读性。
现在,我尝试更新的实际值是"values" : {...}
阵列内(或对象,或列表,想我没有与JSON很多经验其一)。据我所知一些值,我设法创造认为找到服务器上的对象的_id。然后我使用Python-CouchDB的模块如在文档描述:
for item in db.view('CustomViews/test2', key="GENERIC"):
doc = db[item.id]
这使我的对象。不过,我想更新值阵列内的一个值,可以说fld-c3d4...
。怎么会呢?使用doc['values'] = 'new_value'
更新整个阵列。我试过其他(貌似逻辑)的方式沿doc['values['fld-c3d4']'] = 'new_value'
的线条,但不能换我的头周围。我找不到任何文档中的例子。
所以这里有一个例子,如何更新fld-c3d4
。
你有你的文件,表示与嵌套的字典词典。
如果你想要得到的值,你会做这样的事情:
values = doc['values']
现在,变量值指向文档中的值。
从那里,你可以访问一个替代值:
values['fld-c3d4'] = 'new value'
如果您想直接从更新的文档的价值,你就必须连锁那些操作:
doc['values']['fld-c3d4'] = 'new value'