我正在使用 FlutterFire 使用Firebase无服务器服务开发Android应用。
但是,当我尝试使用集合组查询某些数据时,当我使用where子句时,查询返回空结果。
在我的数据库中,有一个名为“ users
”的集合,在“ users
”中的每个文档中都存在一个名为“ subcollection
”的chats
,就像这样:< / p>
users/{userDocument}/chats/{chat}
一个聊天是两个用户之间的对话,一个用户在自己的文档中拥有文档聊天,另一个用户由文档聊天的documentId引用,documentId使用云函数onCreated存储在uid字段中。 DocumentChat example
因此,当我尝试使用collectionGroup
进行所有聊天时,我会使用:
Firestore.instance
.collectionGroup('chats')
.where('uid', isEqualTo: userId)
.snapshots(includeMetadataChanges: true);
在这种情况下,“ userId”具有用户1的ID,“ uid”具有用户2的ID。在app中,userId引用“ uid”,并且我保证变量userId具有与field相同的值'uid'。
我创建了这段代码来打印userId值
static Stream<QuerySnapshot> getStreamChats(userId) {
print('querying userId: $userId');
Stream<QuerySnapshot> _stream = Firestore.instance
.collectionGroup('chats')
.where('uid', isEqualTo: userId)
.snapshots(includeMetadataChanges: true);
_stream.listen((_q) => print(_q.documents));
return _stream;
}
然后在运行时输出以下内容:
I / flutter(4044):查询userId:YNANBZqQdNg5wYkzXRTNkPWwCHC3
I / flutter(4044):[]
当我运行不带where子句的查询时,该查询返回chats集合内的所有文档。
我尚未检查任何规则,因此可以读/写。