Firestore云侦听器,不适用于集合内的集合

时间:2019-04-24 19:32:51

标签: python firebase google-cloud-firestore

我正在设置一个程序,该程序使用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')

我做错什么了吗?

1 个答案:

答案 0 :(得分:2)

Firestore客户端不提供单个API来侦听集合及其嵌套子集合中的所有文档。 Firestore客户端可以侦听查询结果,该查询结果必须针对单个集合进行。

子集合中的文档实际上不是任何“父”集合的一部分。每个子集合都是其自己的独立集合,并且需要其自己的查询才能侦听。因此,如果您想知道集合中的任何文档或任何嵌套子集合是否发生更改,则无论其位于何处,都需要在每个独立的集合上添加一个侦听器。这意味着您还必须知道所有子集合的名称-没有用于查询的通配符。