【问题标题】:Flutter firestore get all documents where a field contains a specific map keyFlutter firestore 获取字段包含特定映射键的所有文档
【发布时间】:2021-08-25 18:25:18
【问题描述】:

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

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

等等……

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

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

我在 Stream Builder 中使用它...

我不想在选择完所有文档后将其全部保存...

提前非常感谢!

【问题讨论】:

    标签: flutter dart mobile google-cloud-firestore


    【解决方案1】:

    地图不是数组,所以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")),但我自己还没有尝试过。

    【讨论】:

    • 非常感谢,正如您所说,问题在于电子邮件地址中的点。我已按照您的建议使用 FieldPath 进行了更正!
    • 一般来说:电子邮件作为对象键是一个可怕的想法,因为您遇到的所有原因等等。
    猜你喜欢
    • 2023-02-21
    • 2021-11-27
    • 2019-05-28
    • 2018-09-04
    • 2020-02-24
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多