Firestore,Python,更新复合查询检索的文档中的字段

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)

Mar*_*y B 5

您还必须在迭代 时指定集合引用并获取文档 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)

您可以查看此文档以获取更多信息。