使用通配符作为路径

时间:2016-11-16 00:39:57

标签: javascript firebase firebase-realtime-database

我有数据,其中我试图遵循Firebase关于平面结构的建议,因此我没有超出我需要的数量。最终结果是我在这样的节点中组织了引号:

quotes -> clientName -> quoteObject

quoteObjects有一个'dateCreated'值,我希望能够像这样提取这些数据(因为当我拉出一个特定页面的所有引号的大列表时,我然后使用object assign来制作要显示的一大类对象):

  const quotesRef = firebase.database().ref('quotes');
    quotesRef.orderByChild('dateCreated').on('value', snapshot => {
       // function
    });

不幸的是,dateCreated值超过一个级别,因此标准查询不起作用。我知道如果您知道父路径,则可以执行深层路径查询,但在我的情况下,clientName父项始终是唯一的。鉴于此,是否可以指定一种通配符路径?如果是这样,我该怎么办呢?干杯!

编辑:显示数据库示例,抱歉最初应该更具体。

quotes
    - ClientEmailOne
        -UniqueQuoteID
            - createdBy: ClientEmailOne
            - dateCreated: 1479255005172
            - email: "clientsEmail@example.com"
    - ClientEmailTwo
        -UniqueQuoteID
            - createdBy: ClientEmailTwo
            - dateCreated: 1479255005172
            - email: "clientsEmail@example.com"
     - ClientEmailThree
         -UniqueQuoteID
            - createdBy: ClientEmailThree
            - dateCreated: 1479255005172
            - email: "clientsEmail@example.com"
        -UniqueQuoteID
            - createdBy: ClientEmailThree
            - dateCreated: 1479255005172
            - email: "clientsEmail@example.com"
        -UniqueQuoteID
            - createdBy: ClientEmailThree
            - dateCreated: 1479255005172
            - email: "clientsEmail@example.com"

1 个答案:

答案 0 :(得分:5)

Firebase会考虑您运行查询的位置的子项。您指定在上订购/过滤的子项可以包含属性的路径,但不能包含任何通配符。

<强>更新

使用您的新数据结构,您似乎正在尝试跨所有客户端以及每个客户端的所有引号进行查询。其中有两个通配符(&#34;所有客户&#34;和#34;所有引号&#34;在此之下),Firebase的查询模型不允许。

您当前的模型允许查询特定客户的所有报价:

from collections import Counter

text = 'Some text from your file that you have read into this variable'

    print(sorted(map(len, text.split())))

    word_lengths = {}

    # cumulate number of words
    total = 0
    for k,v in sorted(Counter(map(len, text.split())).items()):
        total += v
        word_lengths[k] = total


    print(word_lengths)
    # {8: 12, 3: 1, 4: 11}

如果要查询所有客户端的所有引号,您需要添加包含所有引号的数据结构(无论其客户端如何):

ref.child("quotes").child("ClientEmailOne").orderByChild("dateCreated")

然后你可以查询:

allquotes
    -UniqueQuoteID
        - createdBy: ClientEmailOne
        - dateCreated: 1479255005172
        - email: "clientsEmail@example.com"
    -UniqueQuoteID
        - createdBy: ClientEmailTwo
        - dateCreated: 1479255005172
        - email: "clientsEmail@example.com"
     -UniqueQuoteID
        - createdBy: ClientEmailThree
        - dateCreated: 1479255005172
        - email: "clientsEmail@example.com"
    -UniqueQuoteID
        - createdBy: ClientEmailThree
        - dateCreated: 1479255005172
        - email: "clientsEmail@example.com"
    -UniqueQuoteID
        - createdBy: ClientEmailThree
        - dateCreated: 1479255005172
        - email: "clientsEmail@example.com"