使用CouchDB的 - python的嵌套对象的工作

问题描述 投票:1回答:1

免责声明: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'的线条,但不能换我的头周围。我找不到任何文档中的例子。

python syntax couchdb couchdb-python
1个回答
1
投票

所以这里有一个例子,如何更新fld-c3d4

你有你的文件,表示与嵌套的字典词典。

如果你想要得到的值,你会做这样的事情:

values = doc['values']

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

从那里,你可以访问一个替代值:

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

如果您想直接从更新的文档的价值,你就必须连锁那些操作:

doc['values']['fld-c3d4'] = 'new value'
© www.soinside.com 2019 - 2024. All rights reserved.