【问题标题】:How to query field exist some document in firebase如何查询字段存在于firebase中的一些文档
【发布时间】:2022-02-17 17:28:37
【问题描述】:

我使用firebase,nodejs,我有一个问题如何查询字段是否存在一些文档。

例子:

  Collections : users => document : A with field {
                                                    ....
                                                    is_correct: true
                                                   }
                          document : B with field {
                                                   .....
                                                  }

在我上面的示例中,我在集合用户中有两个文档。在文档 A 我有字段 is_correct: true 而在文档 B 字段 is_correct 不存在。 我的收藏用户大约有 15.000 个文档,其中有 50 个文档包含字段 is_correct: true

我写代码的时候是这样的:

await firestore.collection('users').where('is_correct', '==', true).get();

它可以得到正确的我 50 文件。但我不明白它是否可以在字段 is_correct 上使用索引?它可以查询最佳性能吗?我知道如果字段未定义,firebase 无法获取文档。以防万一?请帮忙 ?谢谢你

【问题讨论】:

  • 我认为这个answer 也可能有帮助。

标签: node.js firebase google-cloud-firestore


【解决方案1】:

对于像这样的简单查询

firestore.collection('users').where('is_correct', '==', true)

您不需要配置任何索引,Firestore 会自动完成。


如您所述,只有存在给定字段的文档才能匹配查询。

Not-equal (!=) 和 not-in 查询也是如此:它们排除给定字段不存在的文档,如 documentation 中所述。

另外,请注意,当字段设置为任何值时存在,包括空字符串 ("")、nullNaN(不是数字)。


因此,综上所述,如果要查询is_correct 不是true 的文档,则需要在这些文档中创建此字段,其值不同于true

【讨论】:

  • 如果我理解正确,firestore 将使用索引来检索我的 50 个文档,还是 firestore 必须扫描所有 15,000 个文档并获得我想要的文档。就我而言,我只想获取 is_correct 等于 true 的字段。没有 is_correct 字段等于 true 的文档不会影响任何内容。对吗?
  • Firstore 使用索引查找第 50 个文档。您只需为与查询匹配的文档支付阅读费用。您将在此official video 中找到有关此过程的一些非常清晰的解释(请注意,在发布视频时,未提供的查询不可用)。 “没有 is_correct 字段等于 true 的文档不会影响任何内容。” => 没错。
猜你喜欢
  • 2018-12-14
  • 2014-01-06
  • 1970-01-01
  • 2017-04-26
  • 2016-07-15
  • 2022-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多