使用 couchdb-python 处理嵌套对象
Work with nested objects using couchdb-python
免责声明:Python 和 CouchDB 对我来说都是新的。到目前为止,我的 "programming" 主要由 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]
这给了我对象。但是我想更新值数组中的一个值,比方说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'
免责声明:Python 和 CouchDB 对我来说都是新的。到目前为止,我的 "programming" 主要由 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]
这给了我对象。但是我想更新值数组中的一个值,比方说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'