Car*_*rlo 2 python google-cloud-firestore
我需要更新 Firestore 数据库中的一堆文档。我通过使用查询成功检索了它们,但现在我应该更新每个字段中的相同字段,但我遇到了麻烦。这是我尝试过的:
def main():
db_credentials = "some_local_file.json"
cred = credentials.Certificate(f"{db_credentials}")
firebase_admin.initialize_app(cred)
db = firestore.client()
user_id = "user_ID_000"
doc_ref_generator = db.collection(u'CollectionName').where(u'UID', u'==', user_id).where(u'Status', u'==', "Active").stream()
for doc_ref in doc_ref_generator:
doc_ref.update({u"Status": u"non_active"})
if __name__ == "__main__":
main()
Run Code Online (Sandbox Code Playgroud)
我收到错误:
File "/Users/user_name/projects/xxx/firestore_check.py", line 17, in main
doc_ref.update({u"Status": u"non_active"})
AttributeError: 'DocumentSnapshot' object has no attribute 'update'
Run Code Online (Sandbox Code Playgroud)
您还必须在迭代 时指定集合引用并获取文档 id stream()。请参阅下面的示例代码:
# Collection Reference
col_ref = db.collection(u'CollectionName')
doc_ref_generator = col_ref.where(u'UID', u'==', user_id).where(u'Status', u'==', "Active").stream()
for doc_ref in doc_ref_generator:
# Document Reference
doc = col_ref.document(doc_ref.id)
doc.update({u"Status": u"non-active"})
Run Code Online (Sandbox Code Playgroud)
或者您可以使用该reference属性从 DocumentSnapshot 获取文档引用:
for doc_ref in doc_ref_generator:
# doc = col_ref.document(doc_ref.id)
doc_ref.reference.update({u"Status": u"non-active"})
Run Code Online (Sandbox Code Playgroud)
您可以查看此文档以获取更多信息。