首页 > 解决方案 > 按文档数组中的项目查询,并按项目在数组中的位置排序

问题描述

我有一个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 个元素,元素按从高到低排序。

我正在查看文档,但无法找到解决方案。也许我需要完全不同的数据结构?

标签: google-cloud-firestore

解决方案


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

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

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

然后,您可以按地图属性的值对查询进行排序。所以,在 JavaScript 中,它会是这样的:

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

推荐阅读