我是Firestore的新手,试图找出一种使用Dart在Firestore中添加一些文档的快速方法。
我用下面的代码。我在列表中大约有3000个字符串,最终添加了所有3000个文档,但是花了很长时间,大约10分钟,并且在batch.commit之后我还收到一条错误消息,即超过了500个限制,甚至尽管它添加了所有3000个文档。
我知道我应该一次将其分解为500个,但是事实证明它添加了列表中的所有文档。我在Firestore Console中 checkin ,所有3000个文档都在那里。
每次添加文档时,我都需要创建一个文档ID。我究竟做错了什么?可以使用add来获取文档引用,然后使用batch.setData吗?
Future<void> addBulk(List<String> stringList) async {
WriteBatch batch = Firestore.instance.batch();
for (String str in stringList) {
// Check if str already exists, if it does not exist, add it to Firestore
if (str.isNotEmpty) {
QuerySnapshot querySnapshot = await myCollection
.where('name', isEqualTo: str)
.getDocuments(source: Source.cache);
if (querySnapshot.documents.length == 0) {
UserObject obj = UserObject(name: str);
DocumentReference ref = await myCollection.add(obj.toMap());
batch.setData(ref, UserObject.toMap(), merge: true);
}
}
}
batch.commit();
}
最佳答案
实际上,您的代码只是单独添加每个文档,而与批处理无关。这行代码可以做到:
DocumentReference ref = await myCollection.add(obj.toMap());
如果您删除该行(再次没有碰到
batch
),我相信由于批次大小,您只会看到失败。如果您只是想为要添加到批处理中的文档生成唯一的ID,请使用不带参数的document()代替:
DocumentReference ref = myCollection.document();
关于dart - Firestore batch.commit一次添加500多个文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61917444/