Firestore:按文档数组中的项目查询

时间:2017-10-20 12:36:08

标签: firebase google-cloud-firestore

我有一个文档“user”,其中有一个名为“photos”的密钥。这是一个保存的字符串数组,即“照片”文档的ID。

我想通过此“照片”字段查询“用户”:我希望在“照片”属性中拥有此ID的所有用户。

这可以通过firestore吗?

4 个答案:

答案 0 :(得分:32)

不幸的是,虽然它已经在我们的路线图上了。

与此同时,您需要使用地图,而不是:

listitem

现在,您可以通过photos: { id1: true id2: true } 过滤来查找id1的所有用户。

详细了解如何在Firebase documentation中查询此类集。

答案 1 :(得分:27)

Added 'array-contains' query operator for use with .where() to find documents where an array field contains a specific element.

https://firebase.google.com/support/release-notes/js 5.3.0

Update: also available in @google-cloud/firestore: https://github.com/googleapis/nodejs-firestore/releases/tag/v0.16.0

Update 2 https://firebase.googleblog.com/2018/08/better-arrays-in-cloud-firestore.html

Update 3 now available in Admin Node.js SDK v6.0.0 https://github.com/firebase/firebase-admin-node/releases

答案 2 :(得分:4)

以下是对答案的一些扩展,因为有些人似乎对必须为每个键创建索引感到困惑,Firestore已经为简单查询索引了数据,因此您可以执行简单的查询,如

"series": [
  {
    "name": "Market Value",
    "data": [
      {
        "name": "Market Value",
        "y": 216264
      }
    ]
  },
  {
    "name": "Benchmark Market Value",
    "data": [
      {
        "name": "Market Value",
        "y": 216264
      }
    ]
  },
  {
    "name": "Notional Market Value",
    "data": [
     {
        "name": "Notional Market Value",
        "y": 216655
      }
    ]
  }
]

但除非您为这些参数索引数据,否则无法进行复合查询。因此,您需要索引才能执行以下操作:

documentReference.where('param','==','value').onSnapshot(...)

因此,只要您需要身份证的照片,就可以将其保存为

 documentReference.where('param','==','value').where(..otherparams...).onSnapshot(...)

你可以简单地查询在他们的photoField中拥有(例如)fieldID1的用户,而无需在下面形成任何索引和类似查询。

usersCollection :                        (a collection)
    uidA:                                (a document)
         photoField:                     (a field value that is a map or object)
            fieldID1 : true              (a property of the photoField)
            fieldID2 : true              (a property of the photoField)
            etc ...  

答案 3 :(得分:1)

截至2019年11月,Firestore现在已添加``中''查询。 根据{{​​3}}:

使用in查询,您可以在特定字段中查询多个值 (最多10个)在单个查询中。您可以通过传递包含以下内容的列表来执行此操作 您要搜索的所有值,Cloud Firestore将匹配 字段等于这些值之一的任何文档。