我正在设置一个程序,该程序使用Firebase中的Admin Sdk,它需要能够对集合中添加的所有更改或文档进行更新。问题是当它是一个collection / document / collection / document / collection时不会更新。
我的代码是这个。 (无效)
import time
import firebase_admin
from firebase_admin import credentials
from google.cloud import firestore
def on_snapshot(doc_snapshot, changes, read_time):
for doc in doc_snapshot:
print(u'Received document snapshot: {}'.format(doc.id))
cred = credentials.Certificate('cred.json')
default_app=firebase_admin.initialize_app(cred)
db = firestore.Client()
doc_ref = db.collection('company').document('main').collection('restaurant').document('info').collection('orders')
doc_watch = doc_ref.on_snapshot(on_snapshot)
#for this example i will use a while (it works too)
while True:
time.sleep(1)
print ('processing...')
但它可与此doc_ref一起使用
doc_ref = db.collection('orders')
也这样
db.collection('company').document('main').collection('restaurant')
我做错什么了吗?
答案 0 :(得分:2)
Firestore客户端不提供单个API来侦听集合及其嵌套子集合中的所有文档。 Firestore客户端可以侦听查询结果,该查询结果必须针对单个集合进行。
子集合中的文档实际上不是任何“父”集合的一部分。每个子集合都是其自己的独立集合,并且需要其自己的查询才能侦听。因此,如果您想知道集合中的任何文档或任何嵌套子集合是否发生更改,则无论其位于何处,都需要在每个独立的集合上添加一个侦听器。这意味着您还必须知道所有子集合的名称-没有用于查询的通配符。