2016-06-12 64 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