按文档数组中的项目进行查询,并按项目在数组中的位置进行排序

时间:2019-07-17 22:46:24

标签: google-cloud-firestore

我有一个dinosaurs集合,其中包含以下结构的文件:

doc#1:

    name: "Tyrannosaurus rex",
    dominantColors: [
        "beige",
        "blue",
        "green"
      ]

doc#2:

    name: "Velociraptor",
    dominantColors: [
        "green",
        "orange",
        "white"
      ]

我想按颜色名称(例如:green)查询集合,以按dominantColors数组中颜色位置对文档进行排序。首先获取green在数组中位置较高的文档,然后在其中较低的文档中获取。因此,在提供的情况下,我将首先获得doc#2,然后得到doc#1

每个dominantColors数组包含3个元素,且元素从最主要到最小排序。

我正在浏览文档,但是找不到解决方案。也许我需要一个完全不同的数据结构?

1 个答案:

答案 0 :(得分:2)

Cloud Firestore不支持按排名索引查询数组。查询数组的唯一方法是使用包含数组的类型查询。

您可以做的是使用地图组织颜色,其中颜色是键,其等级是值:

name: "Tyrannosaurus rex",
dominantColors: {
    "beige": 1,
    "blue": 2,
    "green": 3
}

然后,您可以根据地图属性的值对查询进行排序。因此,在JavaScript中,应该是这样的:

firebase
    .collection('dinosaurs')
    .where('dominantColors.green', '>', 0)
    .orderBy('dominantColors.green')