我具有如下数据库结构(出于这个问题的目的而简化):
A = [1,2,3,4,5,6,7]
temp = A[0]
print(temp)
for x in range(1, len(A)):
for y in range(x):
temp = str(temp) + "+" + str(A[y+1])
print(temp)
temp = A[0]
我要做什么: 获取集合“注册”中所有用户的所有订单列表。 (请注意,“用户”文档的数量随时间变化,并且子集合内“订单”文档的数量也是可变的)
更多... 查询FireStore以查找集合“注册”中的所有可用文档(用户),并为每个这些文档(用户)在其名为“ orders”的子集合中找到所有订单。
如何在最短的步骤(最少的查询)中做到这一点?
对于我来说,在每个“用户”文档中添加一个“虚拟”字段是否必不可少?我已经在StackOverflow上阅读到,除非父文档具有“常规”字段,否则FireStore无法查询子集合。即使添加了虚拟字段,我也无法使其正常工作。
我最近的努力是:
Collection: registrations
-> Document: params = {someParameter: "value"}
-> Document: user_01
-> Sub-collection: orders
-> Document: order_AA = {type: "Q1", address: {pincode: "000000", city:"Paris"}
-> Document: order_AB = {type: "Q2", address: {pincode: "111111", city:"London"}
...
-> Document: user_02
-> Sub-collection: orders
-> Document: order_AC = {type: "Q1", address: {pincode: "222222", city:"Berlin"}
-> Document: order_AD = {type: "Q1", address: {pincode: "333333", city:"Paris"}
...
我得到了错误:
错误:[TypeError:userDoc.collections不是函数。 (在 'userDoc.collections(“ orders”)','userDoc.collections'未定义)]
答案 0 :(得分:1)
您绝对应该按照there所述使用collectionGroup()
方法。
答案 1 :(得分:1)
您可以使用collection group query查询具有相同名称的集合和子集合中的所有文档。因此,对于子集合“订单”,您可以使用以下命令查询这些集合中的所有文档:
firestore().collectionGroup("orders").get()
如果您不想要所有订单文档,则需要以与其他任何查询相同的方式添加过滤器。您只能使用每个订单文档中可用的字段进行过滤(除非要在文档中使用“用户”字段,否则不能按用户过滤)。
我在StackOverflow上已经读到,除非父文档具有“常规”字段,否则FireStore无法查询子集合
这不是事实。无需使用父文档来查询其嵌套子集合。