2016-06-12 65 views
1

上下文:在客戶端上,修改字段並將該更改作爲關鍵字路徑 - 值對傳播到服務器。我從一個keypath開始,如foo.bar.baz = cat,我可以將它轉換爲{foo: {bar: {baz: "cat"}}},然後merge插入我的文檔(可能看起來像{foo: {bar: {baz: "dog"}}})。通過嵌套數組更新/合併文檔

到目前爲止,這一直很好所有對象,但它打破了,當我需要做的事情有陣列


假設我在RethinkDB中的文檔如下所示:{name: "Me", pets: [{name: "Shadow"}]}。用戶決定更新寵物的名稱,所以鍵路徑看起來像pets[0].name = Sparky。據我所知,這不能平凡(或非平凡,就此而言)被轉換成我可以傳遞給merge的東西。或者可以嗎?思考?

回答

0

你必須寫一些像.update(function(row) { return {pets: row('pets').changeAt(0, row('pets')(0).merge({name: 'Sparky'}))};})。我會建議改爲製作pets從名字到寵物的地圖(或者如果你真的想索引的話,可以從「數字轉換爲字符串」到寵物)。

+0

感謝mlucy。我將把數字作爲字符串映射到值。 (我會*喜歡*保持訂購的「寵物」,如果我要通過名稱[名稱到值映射]鍵,我需要通過另一個數組跟蹤訂單......我如果任何名稱改變,需要更新。) – Max

+0

好吧,我最終做的事情有點怪誕,但無論如何這是一個業餘愛好項目。我只是檢索了整個對象,完成了我需要的更改,然後把整個事情都放回去了('替換整個文檔)。簡單,相對容易,並且沒有黑客......除非是非原子的而且效率低下的。 – Max