程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何从 Cloud Firestore 中的索引中排除字段?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何从 Cloud Firestore 中的索引中排除字段??

开发过程中遇到如何从 Cloud Firestore 中的索引中排除字段?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何从 Cloud Firestore 中的索引中排除字段?的解决方法建议,希望对你解决如何从 Cloud Firestore 中的索引中排除字段?有所启发或帮助;

这是我的数据库(foo 是顶级集合)

如何从 Cloud Firestore 中的索引中排除字段?

我想从索引中排除 baz 字段,所以我创建了一个像这样的单字段异常索引:

如何从 Cloud Firestore 中的索引中排除字段?

如何从 Cloud Firestore 中的索引中排除字段?

我正在使用:

var collection = FirebaseFirestore.instance.collection('foo');
var snapshot = await collection.get();
for (var doc in snapshot.docs) {
  print(doc.data());
}

打印

{Bar: 0,baz: 1}

为什么不排除 baz?那么,豁免字段的正确方法是什么?

解决方法

Cloud Firestore 是一个索引数据库。默认情况下,当您将文档写入 Cloud Firestore 时,该文档会添加到该文档中每个字段的索引中的适当位置,以便为使用 npm: '7.20.0' node: '12.18.3',angular-cli: '11.2.14' (project) orderBy 的查询做好准备子句。

如您在问题中所示,定义对此默认行为的豁免将不会为该字段创建索引 - 它不会从对文档数据的任何请求中省略该字段。

要从返回的数据中省略字段,您可以使用所谓的字段掩码。过去,Firebase/Firestore SDK 支持使用这些,但该功能在 alpha 时代被删除,因为它会导致数据争用和缓存冲突。我所知道的唯一仍然支持屏蔽返回字段的 API 是 REST API 本身,它在支持的操作上使用 DocumentMask

例如,为了显示您添加的豁免的作用,这里有一个名为 where 的集合,其中包含少量字段为 "someCollection""bar" 的文档:

"baz"

默认情况下,将创建以下索引:

如何从 Cloud Firestore 中的索引中排除字段?

通过在您的问题中添加例外,您可以禁用为 "someCollection": { "aaa": { "bar": 0,"baz": 1 },"bbb": { "bar": 0,"baz": 2 },"ccc": { "bar": 1,"baz": 0 },"ddd": { "bar": 1,"eee": { "bar": 2,"baz": 1 } } 构建索引,这将阻止使用诸如 bazorderBy("baz") 之类的查询。

,

正如您将在 doc 中读到的:

默认情况下,Cloud Firestore 自动维护单字段 索引文档中的每个字段和地图中的每个子字段。云 Firestore 对单字段使用以下默认设置 索引:

  • 对于每个非数组和非映射字段,Cloud Firestore 定义了两个集合范围的单字段索引,一个是升序模式,另一个是 一个降序模式。

通过为一个字段创建单字段索引免除,您实际上免除了该字段的自动索引编制,但这并不意味着该字段不会被查询返回。。 >

准确地说,通过客户端 SDK(包括 Flutter plugin)执行的 Firestore 查询返回与查询对应的整个文档,即文档的所有字段(独立于这些字段中的一些被排除的事实)来自自动索引)。​​


请注意,使用 Firestore REST API 时,您可以在获取文档时使用 DocumentMask,这将“将文档上的 get 操作限制为其字段的子集”。这对于客户端 SDK 来说是不可能的

大佬总结

以上是大佬教程为你收集整理的如何从 Cloud Firestore 中的索引中排除字段?全部内容,希望文章能够帮你解决如何从 Cloud Firestore 中的索引中排除字段?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。