Flutter firestore 获取字段包含特定映射键的所有文档

Flutter firestore get all documents where a field contains a specific map key

在我的 firestore 数据库中,我有一个集合调用 rooms,其中我有多个文档,在每个文档中(一个文档是一个房间),我有一个地图字段,它称为 users,这是电子邮件和显示名称的映射:示例:

{
john.doe@exemple.com : "John Doe",
nemar@gmail.com : "Nemar",
}

等...

我如何进行查询以获取用户字段包含以电子邮件命名的密钥的所有房间文档,知道每个密钥都可能不同,具体取决于用户是否在房间内?喜欢 :

firestore.collection('rooms').where('users', arrayContains: "john.doe@exemple.com").snapshots()

我在 Stream Builder 中使用它...

我不想在选择了所有文档后将它们放入...

非常感谢!

地图不是数组,因此 arrayContains 在这里不起作用(按设计)。

我认为您可以最轻松地 use a not-equal condition 此处的嵌套字段:

firestore.collection('rooms').where('users.john.doe@exemple.com", notEqual: "").snapshots()

我仍然看到的主要问题是电子邮件地址中的点也会被解释为嵌套字段的分隔符,因此您需要找到解决方案。我希望这个技巧在于在基于多个字符串的查询中使用 FieldPath object(因此:new FieldPath("users", "john.doe@exemple.com")),但我自己还没有尝试过。