【问题标题】:Query a Firestore Map property inside a document查询文档中的 Firestore Map 属性
【发布时间】:2019-05-23 08:58:04
【问题描述】:

我有一个包含多个属性的文档的集合(组),其中一个(成员)是具有以下结构的 Map 数组:

members:[{"is_admin":true,"user":"users/someuserid"}]

当“成员”是一组引用(对用户文档)时,很容易找到用户所属的所有组:

   db.collection("groups").whereField("members", arrayContains: db.document("users/"+UserDefaults.standard.string(forKey: "firebase_uid")!) ).getDocuments(){

我正在尝试实现相同的目标(获取用户所属的所有组文档),但我找不到查询地图属性内部的正确方法。

【问题讨论】:

  • 你能更清楚地定义你的结构吗?为什么要存储一组地图?

标签: swift firebase google-cloud-firestore


【解决方案1】:

您目前无法使用 Firestore 执行此类查询。您只能匹配数组中某个对象的全部内容,而不是数组中对象中的特定字段。如果你想匹配一个恰好包含{"is_admin":true,"user":"users/someuserid"} 的数组字段,你应该能够做到这一点。您必须提供所有要搜索的对象字段的确切字段。

如果您只想查找具有特定字符串值的文档,请考虑将该值拆分到其自己的字段中,以便进行索引和搜索。

【讨论】:

  • 这是两年前的事了,有更新吗?还是不可能吗?
【解决方案2】:

firebase 好像有过更新

现在你可以说:-

我来自 dart,所以下面的语法会有所不同

CollectionReference _collectionReference= FirebaseFirestore.instance.collection('groups');

String _searchingForThisUserID = users/someuserid; // which is the value u were looking for

QuerySnapshot _collectionSnapshot = await _collectionReference
    .where('anotherFieldNameIfYouWant', isEqualTo: 'otherValueIfYouWant')
    .where('members.user', isEqualTo: '_searchingForThisUserID ')
    .get();

不管语法如何,我想你都会明白我的意思

您将看到members.user 我如何通过此地图的字段名称访问 firebase 数组中的地图值

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-12
    • 2020-11-22
    • 1970-01-01
    • 2018-07-12
    相关资源
    最近更新 更多