array_contains查询对象

时间:2018-09-22 18:22:15

标签: javascript firebase google-cloud-firestore

如果我在名为array_field的集合的每个文档中都有一个字段,其中包含类型为object个元素,我可以查询在对象中的特定字段

- collection

  - document1
    - array_field
      0: { type: tree, age: 143 }
      1: { type: sunflower, age: 1 }
      2: { type: fungus, age: 3 }

  - document2
    - array_field
      0: { type: plane, age: 38 }
      1: { type: plant, age: 2 }
      2: { type: fungus, age: 1 }

是否可以查询每个在其 array_field 中具有类型fungus 的对象的文档?

如果不可能,是否可以通过指定精确的object 来查询文档?
我不知道如何编写查询:.where('array_field', 'array_contains', /*how do I define this object*/)。只是这样的JSON对象:{type: fungus, age: 2}

我要实现的查询如下:

where('array_field', 'array_contains', 'type:fungus')

哪个会返回document1document2,但在这种情况下我找不到有关语法的任何提示。

1 个答案:

答案 0 :(得分:2)

使用当前数据结构是不可能的。 array_contains仅在匹配数组元素的 entire 内容时才起作用,而不仅仅是特定的对象字段。

相反,您可以重组数据以使用具有唯一类型和布尔值的对象,以便查询诸如types.fungus == true之类的东西:

document
    types {
        fungus: true
        plant: true
    }

通常在nosql数据库中复制数据以适合您需要执行的特定查询。