【问题标题】:Paginate data from different queries in FIRESTORE在 FIRESTORE 中对来自不同查询的数据进行分页
【发布时间】:2020-04-24 17:56:43
【问题描述】:

我想在我的网络应用程序中显示一个对象列表,但这些对象来自不同的查询,因为 firestore 不支持“或条件”,它只支持“array_contains_any”中的数组。然后,我需要从两个查询中检索该信息,我想将这些查询合并到一个查询中,但我不知道这是否可能。另一方面,我想我可以单独对它进行分页,但我不能正确排序,因为它会单独排序我的文档,这就是为什么我想将查询连接到一个查询上。非常感谢您的帮助。

这些是查询:

query1 = coll_ref.where(fieldname,u'==',value)

query2 = coll_ref.where(u'fieldname',u'array_contains',value)

我想:

query.sort(fieldname).limit(3)

感谢您的宝贵时间

【问题讨论】:

    标签: firebase google-cloud-firestore backend


    【解决方案1】:

    我看到一个潜在的解决方案是运行 query1 和 query2,按字段名对它们进行排序,并将它们限制为三个,然后在您的前端代码中,按字段名对这些响应进行排序并返回前三个。例如(伪代码):

    query1results = coll_ref.where(fieldname,u'==',value).sort(fieldname).limit(3)
    
    query2results = coll_ref.where(u'fieldname',u'array_contains',value).sort(fieldname).limit(3)
    
    combined = query1results.concatenate(query2results).unique()
    
    combined.sort(fieldname)[:3]
    
    

    我不确定你的语言是什么,所以我不能给你一个确切的实现。在上面的例子中,让我们说query1results返回['apple', 'banana', 'orange']query2results返回['banana', 'cucumber', 'kiwi']query1results.concatenate(query2results).unique的结果将是['apple', 'banana', 'orange', 'cucumber', 'kiwi'],然后排序并限制三个结果将是['apple', 'banana', 'cucumber']相当于query.where(query1 or query2).sort(fieldname).limit(3)

    【讨论】:

    • 非常感谢西奥多!如果用户只是移动到下一页和上一页,在我看来这是一条可行的路径。不过,我希望用户能够在不同的页面上移动,您认为使用 firestore 查询可行吗?
    • 我不太清楚你所说的页面是什么意思,你介意澄清一下
    • 例如:First > Last 这就是我希望我的用户浏览网站的方式@Theodore_Kim :)
    猜你喜欢
    • 2019-11-14
    • 2020-11-02
    • 2019-04-09
    • 1970-01-01
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    相关资源
    最近更新 更多