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

时间:2019-01-21 17:35:21

标签: 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
}

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

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

我试图将数据放入数组中,但是当前Firebase数组成员资格仅支持过滤数组中的一项。因此,我认为这是存储在哈希图中的一个良好的开端。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

  

我试图将数据放入数组中,但当前的Firebase数组成员资格仅支持过滤数组中的一项。

是的,您只能按数组中存在的单个项目过滤项目。如果要链接多个函数调用,则会收到与此类似的错误:

  

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

并回答您的问题:

  

但是,有什么方法可以查询多个字段来获取包含任意给定数量主题的主题哈希的文档?

不幸的是,Firestore中没有通配符。您必须通过文档的确切属性名称来识别它们。

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

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