如何在Firestore中的单个集合中跨多个文档访问子集合?

时间:2020-06-01 17:28:43

标签: javascript firebase react-native google-cloud-firestore

我具有如下数据库结构(出于这个问题的目的而简化):

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'未定义)]

2 个答案:

答案 0 :(得分:1)

您绝对应该按照there所述使用collectionGroup()方法。

答案 1 :(得分:1)

您可以使用collection group query查询具有相同名称的集合和子集合中的所有文档。因此,对于子集合“订单”,您可以使用以下命令查询这些集合中的所有文档:

firestore().collectionGroup("orders").get()

如果您不想要所有订单文档,则需要以与其他任何查询相同的方式添加过滤器。您只能使用每个订单文档中可用的字段进行过滤(除非要在文档中使用“用户”字段,否则不能按用户过滤)。

我在StackOverflow上已经读到,除非父文档具有“常规”字段,否则FireStore无法查询子集合

这不是事实。无需使用父文档来查询其嵌套子集合。