Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase Firestore:更新对象中的字段将删除以前的字段_Firebase_Dart_Flutter_Google Cloud Firestore - Fatal编程技术网

Firebase Firestore:更新对象中的字段将删除以前的字段

Firebase Firestore:更新对象中的字段将删除以前的字段,firebase,dart,flutter,google-cloud-firestore,Firebase,Dart,Flutter,Google Cloud Firestore,我正在使用FlatterCloudFireStore。下面是我的数据库的外观 我想在a_numbers对象中添加更多字段(如“2222”)。我像这样使用updateData() DocumentReference ref = Firestore.instance.document("products/-LMhR5cAyW4T0sa03UtU"); ref.updateData({"a_numbers": {"2222" : false}}); 上面的代码片段基本上删除了以前的值(1111),

我正在使用FlatterCloudFireStore。下面是我的数据库的外观

我想在
a_numbers
对象中添加更多字段(如“2222”)。我像这样使用
updateData()

DocumentReference ref = Firestore.instance.document("products/-LMhR5cAyW4T0sa03UtU");
ref.updateData({"a_numbers": {"2222" : false}});
上面的代码片段基本上删除了以前的值(1111),然后用2222字段更新数据库


有什么解决方案吗?

这是预期的行为,在您的颤振应用程序中,您需要将
a_编号
存储在
Map
中,并使用
myMap.addAll({key:value})
添加任何新的
(键,值)
对,然后您可以使用
ref.updateData(myMap)

要使用Pair更新'a_number',而不删除以前的值,您应该将参考路径(例如:'a_number.2222')分配给K,并将值分配给V。我编辑了您的代码。请查看它以了解更多信息

DocumentReference ref = Firestore.instance.document("products/-LMhR5cAyW4T0sa03UtU");
ref.updateData({'a_numbers.2222': value});

你是说首先我需要检索所有数据(以map的形式),然后使用
updateData()
方法?在这种情况下,使用
updateData()
有什么用,您也可以使用
setData()
。而且,只需添加一个字段,就可以进行大量的读写操作。我认为不太好。这是因为按照您构建数据的方式,“更新数据”只适用于文档中的第一类字段,即文档下的第一个字段树,因此它将只更新这些字段而无需覆盖,但是,您正在更新嵌套字段,因此需要存储当前值,在其上追加,然后更新。这只是firestore中更新文档的方式,它只更新文档中的顶级字段。我找到了一个解决方案,但这只在Android(本机)中有效,Firebase团队肯定会找到解决方案。请看,有
SetOptions
类缺少颤振。否则一切正常。