【问题标题】:FieldValue arrayUnion and Cloud FireStore with Flutter使用 Flutter 的 FieldValue arrayUnion 和 Cloud FireStore
【发布时间】:2019-02-19 07:31:14
【问题描述】:
我有这样的云火存储对象
"TestCollection" : ["Test1","Test"]
现在我想用 FieldValue.arrayUnion 更新这个数组
因为如果元素相同,那么我不想做任何事情,但如果不是,那么我想添加元素
docRef.updateData({"TestCollection":FieldValue.arrayUnion(["test"])})
但是这个语句给出了对象不能有嵌套数组的错误
任何人都可以请帮助或提供相同类型的示例来查找语法吗?
【问题讨论】:
标签:
firebase
dart
flutter
google-cloud-firestore
【解决方案1】:
2021 年新的 FlutterFire 更新
有了最新的 FlutterFire 更新,API 有很多更新,但幸运的是它并没有因为这个问题而发生太大变化。我说的是最新的 Firebase for Flutter 插件,特别是与新的 firebase_core ^0.7.0 兼容的每个插件。
所以代码看起来很相似:
FirebaseFirestore.instance
.collection("YourCollection")
.doc("YourDocument")
.update({
"anArray": FieldValue.arrayUnion(["data", "to", "append"])
});
【解决方案2】:
这是我使用的代码,它就像一个魅力!
_firestore
.collection('x')
.document('xxxxxxxxxx')
.updateData({
'comments': FieldValue.arrayUnion([
{'comment': "comment goes here", 'sender': "xxxxxxxx@gmail.com"}
])
});
【解决方案3】:
跟进现有答案,如果该字段不存在,您可以使用集合和合并。这样可以避免您检查该字段是否存在。
Firestore.instance
.collection('YourCollection')
.document('YourDocument')
.setData({
'array':FieldValue.arrayUnion(['data1','data2','data3'])
}, merge: true);
【解决方案4】:
如果您有对象列表,则另一种方式
Future<void> updateUserNewGroup(List<Group> data , String id) {
List<Map> list=new List();
if(data !=null && data.isNotEmpty){
data.forEach((grp){
list.add(grp.toJson());
});
}
return ref.document(id).updateData({"groups": FieldValue.arrayUnion(list)}) ;
}
【解决方案5】:
我找到了解决办法。
试试这个:
Firestore.instance
.collection('YourCollection')
.document('YourDocument')
.updateData({'array':FieldValue.arrayUnion(['data1','data2','data3'])});
如果仍然无法正常工作,请尝试更新您的 Firebase。
首先打开一个提取到你的flutter项目的终端,然后:
cd ios
pod update Firebase
此解决方案仅适用于 mac 用户。