我需要使用动态密钥更新嵌套对象中的字段。 路径可能如下所示: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);
但仍然:它会删除此路径中的其他字段。
更新
所以在这个结构中我想只更新complexArray> 0> innerObject>的年龄 的
将上述路径写入update()方法将删除complexArray级别的所有其他内容。 对第一级字段的简单更新工作正常,并允许其他第一级字段不变。
是否可能,像update()这样的firestore函数只能作用于文档的最低字段级别。一旦我将复杂的对象放入文档中,就不可能选择这样的内部字段? 我知道会有解决方案来提取那些复杂的"将对象分成单独的集合+文档,并将它们放入我当前的最低文档级别。我认为这将是一种更加准确的方式来坚持FireStore原则。但是在应用程序方面,使用复杂对象更容易,而不是总是深入挖掘firestore集合+文档结构。
所以我目前的解决方案是将整个复杂对象发送到update()方法,即使我只是在应用程序端只更改了一个字段。
答案 0 :(得分:1)
您是否曾尝试在请求中使用{ merge: true }
选项?
db
.collection("myCollection")
.doc("myDoc")
.set(
{
level1: { level2: { myField: "myValue" } }
},
{ merge: true }
)