Flutter 在Flatter Firestore查询中是否可以使用通配符?

Flutter 在Flatter Firestore查询中是否可以使用通配符?,flutter,google-cloud-firestore,stream-builder,Flutter,Google Cloud Firestore,Stream Builder,我的目标是从“chat/$chattype/room/{roomID}/message”路径流式传输数据库中的所有消息,在该路径中,我需要查询包含包含“user1”字符串的文档的所有消息,而无需显式指定rooms id。似乎无法使其使用通配符,但是。。 是否可以改为通过“chat/$chattype/room/”进行查询 Widget build(BuildContext context) { return StreamBuilder<QuerySnapshot>(

我的目标是从“chat/$chattype/room/{roomID}/message”路径流式传输数据库中的所有消息,在该路径中,我需要查询包含包含“user1”字符串的文档的所有消息,而无需显式指定rooms id。似乎无法使其使用通配符,但是。。 是否可以改为通过“chat/$chattype/room/”进行查询

Widget build(BuildContext context) {
    return StreamBuilder<QuerySnapshot>(
      stream: _firestore
          .collection('chat/$chattype/room/{roomID}/message')
          .where("reciever", isEqualTo: "user1")
          .snapshots(),
      builder: (context, snapshot) {
        if (!snapshot.hasData) {
...
小部件构建(构建上下文){
返回流生成器(
流:_firestore
.collection('chat/$chattype/room/{roomID}/message')
.其中(“接收者”,isEqualTo:“用户1”)
.snapshots(),
生成器:(上下文,快照){
如果(!snapshot.hasData){
...

Firestore查询不支持任何通配符。您必须能够生成集合的完整路径才能进行查询


您可能还想查看哪个允许您查询任何子集合中具有相同名称的所有文档。您可以在“消息”上使用集合组查询要查询all聊天室的all聊天类型的所有消息,请在需要时从那里应用筛选器。

Firestore查询不支持任何通配符。您必须能够生成集合的完整路径才能查询它


您可能还想查看哪个允许您查询任何子集合中具有相同名称的所有文档。您可以在“消息”上使用集合组查询要查询all聊天室的所有聊天类型的所有消息,请在需要时从那里应用筛选器。

查询多个集合的唯一方法是使用,它查询具有给定名称的所有集合

因此:


另请参见颤振参考文档。

查询多个集合的唯一方法是使用,它查询具有给定名称的所有集合

因此:


另请参阅flifter参考文档。

我可以看到这将如何工作,谢谢。但是,这不是对数据库的一个巨大负担吗?我的意思是,如果我有一百万条消息需要搜索,而不是指定$chattype,这可能会将搜索次数减少到1000次?Firestore开发者就是这样非常感谢您。Firestore的大部分性能都来自索引;您需要创建一个collectionGroup索引,或者当您第一次运行查询时,Firestore将给出一条错误消息,其中包含一个链接以自动为您创建索引。完全没有性能损失。由于Firestore对数据的索引方式,这实际上没有额外负担。对所有人来说对于集合组查询,必须在该集合组上定义索引。该索引是Firestore开始查询的位置。写入数据是Firestore更常见的吞吐量限制,这就是为什么我建议在要查询的组中查找集合的唯一名称(
chat/$chattype/room/{roomID}/message
)。因此,如果您在Firestore的其他地方也有
邮件
收藏,那么将它们命名为
聊天室邮件
可能是值得的。谢谢您的回答:)我将阅读更多关于collectionGrouping的内容。我知道这将如何工作,谢谢。但是,这对数据库来说不是一个很大的负担吗?我的意思是,如果我有一百万条消息需要搜索,而不是指定$chattype,这将使它减少到可能只有1000条搜索?Firestore开发者远远领先于你。大多数Firestore性能的提高来自索引;您需要创建collectionGroup索引,或者当您第一次运行查询时,Firestore将给出一条错误消息,其中包含自动为您创建索引的链接。没有任何性能损失。由于Firestore如何索引数据,实际上没有额外负担。允许收集组查询时,必须在该集合组上定义索引。该索引是Firestore开始查询的位置。写入数据是Firestore更常见的吞吐量限制,这就是为什么我建议在要查询的组中为集合找到唯一名称(
chat/$chattype/room/{roomID}/message
)。因此,如果您在Firestore的其他地方也有
邮件
收藏,那么将这些命名为
聊天室邮件
可能是值得的。谢谢您的回答:)我将阅读有关收藏分组的更多信息。
_firestore
      .collectionGroup('message')
      .where("reciever", isEqualTo: "user1")
      .snapshots(),