Отказ от ответственности: и 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..."
}
Я сократил числа aи удалил некоторые записи, чтобы повысить читабельность).Поскольку я знаю некоторые из этих значений, мне удалось создать представление, которое находит _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'
, но не мог обернуться вокруг этого.Я не смог найти пример ни в одной документации.