使用CouchDB-Python处理嵌套对象

时间:2019-02-08 20:47:04

标签: python syntax couchdb couchdb-python

免责声明:Python和CouchDB对我来说都是新的。到目前为止,我的“编程”主要由Bash脚本组成。

我正在尝试创建一个小的脚本来更新CouchDB数据库中的对象。但是,这些对象不是由我的脚本创建的,而是由一个名为Tap Forms的应用程序创建的,该应用程序使用CouchDB进行同步。基本上,我正在尝试自动更新应用程序的内容。这也意味着我不能真正影响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]

这给了我对象。但是,我想在values数组内更新一个,让我们说fld-c3d4...。但是如何?使用doc['values'] = 'new_value'更新整个数组。我按照doc['values['fld-c3d4']'] = 'new_value'的方式尝试了其他(看似合乎逻辑的)方式,但无法将其包围。我在任何文档中都找不到示例。

1 个答案:

答案 0 :(得分:1)

所以这是一个如何更新fld-c3d4的示例。

您的文档代表具有嵌套字典的字典。

如果要获取值,将执行以下操作:

values = doc['values']

现在,变量值指向文档中的值。

从那里,您可以访问一个子值:

values['fld-c3d4'] = 'new value'

如果您想直接从文档中更新值,只需链接这些操作即可:

doc['values']['fld-c3d4'] = 'new value'