Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 云Firestore:基于对象内容的过滤器(通过颤振)_Firebase_Dart_Google Cloud Firestore_Flutter - Fatal编程技术网

Firebase 云Firestore:基于对象内容的过滤器(通过颤振)

Firebase 云Firestore:基于对象内容的过滤器(通过颤振),firebase,dart,google-cloud-firestore,flutter,Firebase,Dart,Google Cloud Firestore,Flutter,我正在使用以下Firestore设置: 现在我想接收当前用户(给定uid)在用户对象/列表中的所有文档。 用户是thje users集合的引用对象 理想情况下,我希望在cloud_firestore软件包中使用Flitter中的此过滤器,但目前我只想知道这是否可行。是的。这是可能的。但是,您需要将用户引用存储为值映射,并创建一个要在客户端中查询的引用(基于用户ID)。看一下文档:我找到了一篇文章,解释说,这是我目前想象不到的。 我将设置更改为: 现在,我可以使用来自flatter的这个查询来

我正在使用以下Firestore设置:

现在我想接收当前用户(给定uid)在用户对象/列表中的所有文档。 用户是thje users集合的引用对象


理想情况下,我希望在cloud_firestore软件包中使用Flitter中的此过滤器,但目前我只想知道这是否可行。

是的。这是可能的。但是,您需要将用户引用存储为值映射,并创建一个要在客户端中查询的引用(基于用户ID)。看一下文档:

我找到了一篇文章,解释说,这是我目前想象不到的。 我将设置更改为:

现在,我可以使用来自flatter的这个查询来接收给定用户的聊天记录

Firestore.instance
    .collection('chats')
    .where('users.' + _auth.currentUser.uid, isEqualTo: true)
    .snapshots
    .listen((data) {...});
我还使用此规则来确保用户只能访问他参与的聊天:

match /chats/{chatId} {
  allow read: if resource.users[request.auth.uid];
  // write rule yet to create
}

与在地图中将userID的值设置为
true
不同,您应该在这里添加一个时间戳,如我链接的文章中所述。使用当前答案,您将无法根据时间按特定顺序对邮件进行排序。它们将以随机(按文档ID)顺序出现。请问,您是如何解决Firestore索引问题的。当添加另一个.where子句时,firestore要求添加一个带有UID值的索引,这显然是没有意义的。