我有一个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个元素,且元素从最主要到最小排序。
我正在浏览文档,但是找不到解决方案。也许我需要一个完全不同的数据结构?
答案 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')