1
私は私のrethinkdbにこのようなデータ構造を持っている:更新特定のデータ〜のpython
{
"id":"123",
"otherId":"asd", <== based on this
"list": [
{
"id":"a",
"list_id":"1", <== and based on this
"status":"available" <== update this
},
{
"id":"b",
"list_id":"2",
"status":"available"
},
{
"id":"c",
"list_id":"3",
"status":"available"
},
{
"id":"d",
"list_id":"4",
"status":"available"
}
]
}
私はLIST_ID = 1のステータスを更新したい場合は、私はPythonでどのように行うのですか?
は、私はこのようにそれを実行しようとしました:r.db('mydb').table('mytable').filter(r.row['Otherid'].eq("asd"))['list'].nth(0).default([]).filter(lambda doc: doc['list_id'] == "1").nth(0).default([]).update({"status":"offline"}).run()
をしかし、それは私がエラーを取得rethinkdb.errors.ReqlQueryLogicError: Expected type SELECTION but found DATUM
UPDATE
データがあるので、私はID(主キー)を使用して照会することはできません。与えられていません。
また、私はこの方法を試してみました:
currentData = r.db('myDb').table('myTable') \
.filter(r.row['otherId'].eq("asd"))['list'].nth(0).default([]) \
.filter(lambda doc: doc['list_id'] == "1").run(con, time_format='raw')
currentData["status"] = "offline"
r.db('mydb').table('mytable').filter(r.row['otherId'].eq("asd"))['list'].nth(0).default([]) \
.update(lambda row: row.merge({'list': row['list'].map(lambda row2: r.branch(row2['list_id'].eq("1"), currentData, row2))})) \
.run(con, time_format='raw')
しかし、それは代わりにudpdate
の新しいデータは、あなたがmap()
とmerge()
を使用する必要があります...