为什么我的所有文档都没有在 Firestore 中更新?
Why aren't all my documents updated in Firestore?
我正在使用 python 尝试向 firestore 集合中的 750 多个文档添加一个字段,但是在尝试执行此操作时,只有前 55 个文档得到更新。我假设发生这种情况是因为 firestore 写入限制,但并不真正明白为什么。
集合结构
注: actividades
是一个大小为20个左右的数组,每个元素只有3个属性。
代码
import firebase_admin
from firebase_admin import credentials, firestore
cred = credentials.Certificate('avancesAccountKey.json')
default_app = firebase_admin.initialize_app(cred)
db = firestore.client()
count = 0
avances = db.collection('avances').get()
for e in avances:
db.collection('avances').document(e.id).update({
'vigente': False
})
count += 1
print(count) # count is 55 when trying to update, 757 otherwise
究竟发生了什么,我该如何解决?
您不应该在遍历集合时改变集合。相反,获取文档引用然后迭代。
count = 0
documents = [snapshot.reference for snapshot in db.collection('avances').get()]
for document in documents:
document.update({u'vigente': False})
count += 1
参考:https://github.com/GoogleCloudPlatform/google-cloud-python/issues/6033
更新: 看来 Firestore python 客户端确实有 20 second timeout for the generator returned from a query.
我正在使用 python 尝试向 firestore 集合中的 750 多个文档添加一个字段,但是在尝试执行此操作时,只有前 55 个文档得到更新。我假设发生这种情况是因为 firestore 写入限制,但并不真正明白为什么。
集合结构
注: actividades
是一个大小为20个左右的数组,每个元素只有3个属性。
代码
import firebase_admin
from firebase_admin import credentials, firestore
cred = credentials.Certificate('avancesAccountKey.json')
default_app = firebase_admin.initialize_app(cred)
db = firestore.client()
count = 0
avances = db.collection('avances').get()
for e in avances:
db.collection('avances').document(e.id).update({
'vigente': False
})
count += 1
print(count) # count is 55 when trying to update, 757 otherwise
究竟发生了什么,我该如何解决?
您不应该在遍历集合时改变集合。相反,获取文档引用然后迭代。
count = 0
documents = [snapshot.reference for snapshot in db.collection('avances').get()]
for document in documents:
document.update({u'vigente': False})
count += 1
参考:https://github.com/GoogleCloudPlatform/google-cloud-python/issues/6033
更新: 看来 Firestore python 客户端确实有 20 second timeout for the generator returned from a query.