1

免責事項: Python と CouchDB はどちらも私にとって初めてのことです。これまでのところ、私の「プログラミング」はほとんどが Bash スクリプトで構成されていました。

CouchDB データベース内のオブジェクトを更新する小さなスクリプトを作成しようとしています。ただし、オブジェクトは私のスクリプトではなく、同期に CouchDB を使用する Tap Forms というアプリによって作成されます。基本的にアプリのコンテンツを自動更新しようとしています。つまり、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 配列の値の1 つを更新したいとします。しかし、どのように?を使用すると、配列全体が更新されます。の行に沿って他の(一見論理的な)方法を試しましたが、頭を包むことができませんでした。どのドキュメントにも例が見つかりませんでした。fld-c3d4...doc['values'] = 'new_value'doc['values['fld-c3d4']'] = 'new_value'

4

1 に答える 1