Почему не все мои документы обновляются в Firestore? - PullRequest
0 голосов
/ 17 сентября 2018

Я использую python для попытки добавить поле к более чем 750 документам в коллекции Firestore, но при попытке сделать это обновляются только мои первые 55 документов.Я предполагаю, что это происходит из-за ограничений записи в Firestore, но на самом деле не понимаю, почему.

СТРУКТУРА СБОРА

enter image description here

Примечание: actividades - это массив размером около 20 элементов, каждый элемент имеет только 3 свойства.

enter image description here

CODE

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

Что именно происходит и как я могу это решить?

1 Ответ

0 голосов
/ 20 сентября 2018

Вы не должны видоизменять коллекцию во время итерации.Вместо этого извлеките ссылки на документы, а затем выполните итерацию.

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

Обновление: Похоже, что клиент Python Firestore имеет 20-секундный таймаут для генератора, возвращенного из запроса .

...