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 个元素,元素按从高到低排序。
我正在查看文档,但无法找到解决方案。也许我需要完全不同的数据结构?
解决方案
Cloud Firestore 不支持按排名索引查询数组。查询数组的唯一方法是使用数组包含类型查询。
你可以做的是使用地图组织你的颜色,其中颜色是关键,它们的等级是值:
name: "Tyrannosaurus rex",
dominantColors: {
"beige": 1,
"blue": 2,
"green": 3
}
然后,您可以按地图属性的值对查询进行排序。所以,在 JavaScript 中,它会是这样的:
firebase
.collection('dinosaurs')
.where('dominantColors.green', '>', 0)
.orderBy('dominantColors.green')
推荐阅读
- spring - 使用 javax.xml.catalog.files 时 Spring 无法启动
- linq - LINQ - .Any 用于类类型列表
和类类型字符串 - flutter - 控制输入颤振
- reactjs - 测试复选框的初始选中状态
- kotlin - Micronaut Data 简单的父/子关系
- c - c 随机行中帕斯卡三角形中所有系数的平方和
- python - 即使 pip 说它已安装,Python 也无法导入 gdal - ubuntu hirsute & impish specific
- java - Android SecurityException:权限拒绝写入和共享文件
- memory - 如果内存是 8 位,MIPS lw 和 sw 是如何工作的
- amazon-web-services - 无法连接到 AWS EC2 实例 - 连接被拒绝