我需要使用动态密钥更新嵌套对象中的字段 . 路径可能如下所示:level1.level2.DYNAMIC_KEY:updatedValue update-method删除level1上的所有其他内容,而不是仅更新嵌套对象中的字段 . update()更像是set() . 我究竟做错了什么?
我已经尝试了以下内容:
我阅读了文档https://firebase.google.com/docs/firestore/manage-data/add-data#update-data,但这是a)静态和b)仍然删除其他字段 .
更新嵌套对象中的字段如果文档包含嵌套对象,则在调用update()时可以使用“点表示法”来引用文档中的嵌套字段
这将是静态的并导致
update({
'level1.level2.STATIC_KEY' : 'updatedValue'
});
然后我发现这个答案https://stackoverflow.com/a/47296152/5552695帮助我使updatepath动态化 . 在此之后所需的解决方案可能看起来像
field[`level1.level2.${DYNAMIC_KEY}`] = updateValue;
update(field);
但仍然:它将删除此路径中的其他字段 .
UPDATE:
我的文件结构如下:
所以在这个结构里面我只想更新complexArray> 0> innerObject> age
将上述路径写入update()方法将删除complexArray级别的所有其他内容 . 对第一级字段的简单更新工作正常,并允许其他第一级字段不变 .
是否有可能,像update()这样的firestore函数只能作用于文档的最低字段级别 . 一旦我将复杂的对象放入文档中,就不可能选择这样的内部字段?我知道会有解决方案将这些“复杂”对象提取到单独的集合文档中,并将它们放入我当前的最低文档级别 . 我认为这将是一种更准确的方式来坚持FireStore原则 . 但是在应用程序方面,使用复杂对象比在垃圾收集文档结构中更深入地挖掘更容易 .
所以我目前的解决方案是将整个复杂对象发送到update()方法,即使我只在应用程序端更改了一个字段 .
1 回答
您是否尝试在请求中使用
{ merge: true }
选项?