【问题标题】:Firebase Firestore REST Request - Query and FilterFirebase Firestore REST 请求 - 查询和过滤
【发布时间】:2020-06-14 14:42:27
【问题描述】:

我在一个 firebase 项目上有一个 firestore 数据库。我想提出休息请求以使用邮递员过滤或查询数据。我正在使用“https://firestore.googleapis.com/v1/projects//databases/(default)/documents/”来获取数据库中已知路径中的数据。这是我的数据库结构的示例:

  • 用户 > xxxxx > 消息 > yyyyy> "sent":"true"

其中“users”和“messages”是集合,“xxxxx”和“yyyyy”是自动生成的文档ID(xxxxx是自动生成的用户ID)

我要做的是找到具有>“sent”:“true”

如果我知道“xxxxx”和“yyyyy”,但我不知道它们,我会成功,因为它们是自动生成的,并且在我的数据库中彼此不同,并且不知道该怎么做。

【问题讨论】:

    标签: firebase google-cloud-firestore request postman


    【解决方案1】:

    您需要运行查询,如 REST API 文档中的 here 所述。

    由于您要查询不同user 文档的所有messages 子集合,因此您需要在StructuredQuery 中“模拟”一个Collection Group Query。这样做的方法是将allDescendants元素设置为CollectionSelector中的true

    因此,在以下 URL 上发出 POST HTTP 请求即可:

      var URL = "https://firestore.googleapis.com/v1/projects/<your-project-id>/databases/(default)/documents:runQuery";
    

    POST 请求的正文应包含:

        "structuredQuery": {
            "from": [{
                "collectionId": "messages",
                "allDescendants": true
            }],
    
            "where": {
                "fieldFilter": {
                    "field": {
                        "fieldPath": "sent"
                    },
                    "op": "EQUAL",
                    "value": {
                        "stringValue": "true",
                    }
                }
            }
        }
    

    请注意,您需要向 Firestore DB 添加单个字段索引,如下所示:


    另请注意,如果您的字段 sentBoolean 类型(而不是您的问题中显示的 String),您需要在 Value JSON 元素中使用 booleanValue 元素。

    【讨论】:

    • @ymeksur 您好,您有时间查看建议的答案吗?
    • 嗨@RenaudTarnec。这几天我很忙。是的,我看了你的答案,效果很好。非常感谢您的详细解答。
    【解决方案2】:

    由于某种原因,我无法使其正常工作。 我有一个名为 dzs 的集合,其中包含一些具有自动生成 id 的文档。

    我想查询并查找具有特定电子邮件地址的文档。 当我在 Postman 中尝试此操作时,它返回(错误 400 错误请求)

    "structuredQuery": {
        "from": [{
            "collectionId": "dzs",
            "allDescendants": true
        }],
    
        "where": {
            "fieldFilter": {
                "field": {
                    "fieldPath": "email"
                },
                "op": "EQUAL",
                "value": {
                    "stringValue": "123@123.com",
                }
            }
        }
    }
    

    【讨论】:

    • 这里也一样。它对我不起作用。我收到了 400 响应代码。
    猜你喜欢
    • 2018-05-08
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    • 2018-08-14
    相关资源
    最近更新 更多