【问题标题】:Firestore query condition using where使用 where 的 Firestore 查询条件
【发布时间】:2020-08-24 00:48:27
【问题描述】:

我正在尝试学习如何使用 where 条件查询 firestore。

如果我注释掉下面显示的 where 条件,则集合的内容会加载并正确排序。

我在该集合中有一个文档,其属性名为:“sharing”,其值为“open”。当我取消注释 where 条件时,我希望它是集合中唯一呈现的文档。

相反,我没有返回任何值。如果我删除 where 条件 - 所有值都会返回并按标题排序。

function useImpactMetrics() {
    const [impactMetrics, setImpactMetrics] = useState([])
    useEffect(() => {
      firebase
        .firestore()
        .collection("impact_metrics")
        //.where("sharing", "==", "open")
        .orderBy("title")
        .onSnapshot(snapshot => {
          const impactMetrics = snapshot.docs.map(doc => ({
            id: doc.id,
            ...doc.data(),
          }))
          setImpactMetrics(impactMetrics)
        })
    }, [])
    return impactMetrics
  }

我看过this post 和评论中引用的博客。

我已尝试启动服务器并加载内容。

在 react 中使用 where 条件和 firestore 是否需要额外的步骤?

【问题讨论】:

  • 取消注释时是否在控制台中出现错误?
  • 感谢@wobsoriano - 我认为只有在查询中有 2 个 where 条件时才需要索引。 orderBy 必须算作其中之一。谢谢。

标签: reactjs firebase google-cloud-firestore


【解决方案1】:

很可能(正如用户 wobsoriano 在评论中暗示的那样)您在控制台输出中收到一条错误消息,提示您需要为此查询中使用的两个字段定义复合索引:sharingtitle

如果您很难找到错误消息,您还可以在查询周围加上try... catch 并将其记录在您更容易找到的地方。

无论哪种方式:在该错误消息中,您将找到一个链接,该链接可将您直接带到 Firestore 控制台页面以创建索引。所有字段都将预先填充,因此您只需单击链接、创建索引并等待几分钟即可完成。

【讨论】:

  • 是的 - 我看到了错误,但我认为那一定是错误的。我刚刚阅读了一篇博客,描述了在 2+ where 条件下需要索引的情况。我没想到 orderBy 会被视为 where 。谢谢。
猜你喜欢
  • 2020-09-07
  • 2018-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-13
  • 2019-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多