Google cloud firestore 如何创建Firestore复合查询以返回映射对象数组中的所有文档?

Google cloud firestore 如何创建Firestore复合查询以返回映射对象数组中的所有文档?,google-cloud-firestore,Google Cloud Firestore,我希望避免从Firestore退回我不需要的文档。我有一组具有以下属性的文档: membership {array} 0 {map} contactGroupId: "1da9a73f89f8ca4c" contactGroupResourceName: "contactGroup/1da9a73f89f8ca4c" 1 {map} contactGroupId: "1da9a73f89f8ca4c"

我希望避免从Firestore退回我不需要的文档。我有一组具有以下属性的文档:

membership {array}
  0 {map}
    contactGroupId: "1da9a73f89f8ca4c"
    contactGroupResourceName: "contactGroup/1da9a73f89f8ca4c"
  1 {map}
    contactGroupId: "1da9a73f89f8ca4c"
    contactGroupResourceName: "contactGroup/1da9a73f89f8ca4c"

我想创建一个复合查询,仅当contactGroupId等于1da9a73f89f8ca4c时才返回文档。类似于
ref.where(membership.{key}.contactGroupId,“==”,“1da9a73f89f8ca4c”)
。这可能吗?

不可能使用数组中映射字段的内容筛选文档。如果要执行此查询,则需要重新构造数据。你有两个选择

  • 将所有
    contactGroupId
    值放入它们自己的数组字段中,并使用查询查找它们
  • 不要使用数组,而是使用
    contactGroupId
    值作为可以在查询中使用的映射键的名称,如
    where(
    membership.1da9a73f89f8ca4c.present
    ,'==',true)
    。您的成员资格字段的结构如下:

  • 非常感谢。我担心这可能是答案。数据是从GooglePeopleAPI导入的,我保留了API返回的结构。
    membership (map)
      - 1da9a73f89f8ca4c
        - present (boolean)
        - contactGroupResourceName = "contactGroup/1da9a73f89f8ca4c"