1
我有我的rethinkdb數據結構是這樣的:更新的具體數據〜蟒蛇
{
"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的狀態,我怎麼在蟒蛇怎麼辦?
我試圖做這樣的:
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
謝謝...