Firebase 如何在Firestore中查询单个地图数据上的多个字段?

Firebase 如何在Firestore中查询单个地图数据上的多个字段?,firebase,nosql,google-cloud-firestore,Firebase,Nosql,Google Cloud Firestore,我正在使用React+Redux+Firebase构建一个应用程序。在Firestore用户集合中,我有多个字段,包括语言、主题和地图数据。那么比如说, // language that user can speak language = { english: true } // subjects that the user can teach subject = { math: true science: true } 在主应用程序中,用户可以通过过滤主题和语言来搜索其他用户。例

我正在使用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)
来查询on字段。但是,有没有办法通过查询多个字段来获取包含任意给定主题数的主题哈希的文档

我尝试将数据放入数组,但目前firebase数组成员资格仅支持筛选数组中的一项。因此,我想这是存储在哈希映射中的一个良好开端。有什么建议吗

我尝试将数据放入数组,但目前firebase数组成员资格仅支持筛选数组中的一项

没错,您只能通过数组中存在的单个项筛选项。如果要链接多个函数调用,将出现与以下类似的错误:

无效的查询。查询仅支持单个数组包含筛选器

回答你的问题:

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

不幸的是,Firestore中没有通配符。您必须根据文档的确切属性名称来标识其属性名称

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

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

谢谢@Alex Mamo:)@Alex Mamo,你会如何动态地进行这种链接?比方说,在我收到之前,我不知道我需要查询多少科目或语言。@卡秋莎,恐怕我不明白你的问题。你能用StackOverflow自己的问题在这里详细说明一下吗?这样我和其他Firebase开发人员可以帮助你。@Alex Mamo,当然可以。刚刚在这里发布了一个新问题:我正在使用firestore。在这种情况下,我们如何使用where条件——获取所有聊天对话,其中“(senderid==loggedinuserid和receiverid==10)或(senderid==10和receiverid==loggedinuserid)”?请建议。谢谢