如何使用flutter更新firestore中所有文档的单个字段?
Posted
技术标签:
【中文标题】如何使用flutter更新firestore中所有文档的单个字段?【英文标题】:How to update a single field of all documents in firestore using flutter? 【发布时间】:2020-11-28 23:26:10 【问题描述】:我在数据库中有 100 个用户文档,我必须将所有文档中的一个字段更新为 0。我们该怎么做?
【问题讨论】:
【参考方案1】:Firestore 不提供类似 SQL 的“update where”命令来一次更新所有内容,因此您必须:
-
查询要更新的文档
迭代每个DocumentSnapshot 并使用reference property 获取其DocumentReference 对象
对于每个文档,update 具有新值的字段
【讨论】:
【参考方案2】:正如@Doug 所说,没有直接的方法,您必须查询数据,从QueryDocumentSnapshot
获取DocumentReference
并在其上调用update
。
var collection = FirebaseFirestore.instance.collection('collection');
var querySnapshots = await collection.get();
for (var doc in querySnapshots.docs)
await doc.reference.update(
'single_field': 'newValue',
);
【讨论】:
为我工作。谢谢:)【参考方案3】:尝试执行以下操作
-
查询要更新的文档
遍历每个
DocumentSnapshot
并使用引用属性获取其DocumentReference
对象,并为每个文档更新字段的新值
void updateNotificationCount() async
FirebaseUser _currentUser = await FirebaseAuth.instance.currentUser();
String authid = _currentUser.uid;
var snapshots =
activityFeedRef.document(authid).collection('feedItems').snapshots();
try
await snapshots.forEach((snapshot) async
List<DocumentSnapshot> documents = snapshot.documents;
for (var document in documents)
await document.reference.updateData(<String, dynamic>
'seen': true,
);
);
catch (e)
print(e.toString());
上面的代码只是在用户点击通知托盘时立即将所有未读通知从 false 更新为 true
【讨论】:
以上是关于如何使用flutter更新firestore中所有文档的单个字段?的主要内容,如果未能解决你的问题,请参考以下文章
如何在flutter的firestore中使用uid更新用户数据
如何使用 Flutter 在 Firestore 中删除集合中的所有文档
如何在 Firebase + Firestore + Flutter 中使用 StreamBuilder 将所有子集合数据获取到 Widget
Flutter & Firebase - FirebaseFirestoreException:如果我按照以下方式制定了 Firebase 规则,如何获得使用 Firestore 中所有数据的