【问题标题】:How can I query multiple fields on a single map data in Firestore?如何在 Firestore 中查询单个地图数据的多个字段?
【发布时间】:2019-06-15 03:33:37
【问题描述】:

我正在使用 React + Redux + Firebase 构建一个应用程序。在 Firestore 用户集合中,我有多个字段,包括语言、主题作为地图数据。比如,

// language that user can speak
language = {
  english: true
}
// subjects that the user can teach
subject = {
  math: true
  science: true
}

在主应用程序中,用户可以通过过滤主题和语言来搜索其他用户。例如,用户可能会寻找可以使用“英语”语言教授“数学”和“科学”的其他用户。

我正在努力过滤地图数据中的多个字段。我可以通过ref.where('subject.${val}', '==' , true) 查询现场。但是有没有办法查询多个字段以获取包含任意给定主题数量的主题哈希的文档?

我尝试将数据放入数组中,但目前 firebase 数组成员仅支持过滤数组中的一项。所以我想这是存储在哈希映射中的一个好的开始。有什么建议吗?

【问题讨论】:

    标签: firebase nosql google-cloud-firestore


    【解决方案1】:

    我尝试将数据放入数组中,但目前 firebase 数组成员仅支持过滤数组中的一项。

    您是对的,您只能通过数组中存在的单个项目来过滤您的项目。如果你要链接多个函数调用,你会得到一个类似的错误:

    无效的查询。查询仅支持具有单个包含数组的过滤器。

    回答你的问题:

    但是有没有办法查询多个字段以获取包含任意给定主题数量的主题哈希的文档?

    很遗憾,Firestore 中没有通配符。您必须通过确切的属性名称来识别文档的属性名称。

    如果您想通过过滤多个属性来限制结果,则需要链接where() 函数,如下例所示:

    ref.where('subject.math', '==' , true)
        .where('subject.science', '==' , true)
        .where('language.english', '==' , true)
    

    【讨论】:

    • 谢谢@Alex Mamo :)
    • @Alex Mamo,你将如何动态地进行这种类型的链接?假设在收到它们之前我不知道需要查询多少个主题或语言。
    • @katyusha 恐怕我不明白你的问题。您能否在 StackOverflow 上详细说明一个新问题,使用它自己的 MCVE,以便我和其他 Firebase 开发人员可以帮助您。
    • @Alex Mamo,当然。刚刚在这里发布了一个新问题:stackoverflow.com/questions/60832639/…
    • 我正在使用 Firestore。在这种情况下,我们如何使用 where 条件 - 获取“(senderid == loggedinuserid and receiverid == 10)或(senderid == 10 and receiverid == loggedinuserid)”的所有聊天对话?请建议。谢谢。
    猜你喜欢
    • 2020-07-14
    • 1970-01-01
    • 2021-09-01
    • 2023-01-22
    • 1970-01-01
    • 2020-11-10
    • 2021-08-14
    • 2020-06-27
    • 1970-01-01
    相关资源
    最近更新 更多