Javascript Firestore用例:can';t通过hashtags和最新的first进行搜索
如何创建具有动态更改字段(如hashtags)和顺序的复合查询 安装程序 我正在使用Firestore实现以下功能:Javascript Firestore用例:can';t通过hashtags和最新的first进行搜索,javascript,google-cloud-firestore,Javascript,Google Cloud Firestore,如何创建具有动态更改字段(如hashtags)和顺序的复合查询 安装程序 我正在使用Firestore实现以下功能: 存储用户可以用标记/哈希标记描述的项目 提供一种基于这些标签查询项目的方法 并按创建日期排序 并使用分页、无限滚动或其他方式限制结果的大小 创建以下结构以容纳哈希标记: /items/{itemId}: { name: "My favorite chair", createdAt: firebase.firestore.FieldValue.serverTimesta
- 存储用户可以用标记/哈希标记描述的项目
- 提供一种基于这些标签查询项目的方法
- 并按创建日期排序
- 并使用分页、无限滚动或其他方式限制结果的大小
/items/{itemId}:
{
name: "My favorite chair",
createdAt: firebase.firestore.FieldValue.serverTimestamp(),
hashtags: {
wooden: true,
red: true,
small: true
}
}
“小”、“红色”项目的查询如下所示:
const userSuppliedKeywords = ['red', 'small'];
let ref = firebase.firestore().collection('items');
ref = userSuppliesKeywords.reduce(
(acc, key) => acc.where(`hashtags.${key}`, '==', true)
, ref
);
ref.orderBy('createdAt', 'desc').limit(20).get()....
问题
由于使用orderBy,Firestore需要此搜索的索引。但这是不可行的,因为[hashtag.red,hashtag.small,createdAt]的索引对于下一个查询没有用处
问题:
如何创建具有动态更改的字段和顺序的复合查询
思想
- 基于用户输入的查询很常见,尤其是带有hashtag的查询
- 不应下载完整的结果集,因此需要分页
- 显示最新结果也是一项常见要求
['wooden', 'red', 'small', 'wooden-red', 'wooden-small', 'red-small',
'wooden-red-small']
然后可以为该属性编制索引。根据firestore的限制,只需要一个“array contains”子句。但这会导致一些~2^n问题
谢谢 现在,Firestore
在和数组中包含了查询,您可以找到更多详细信息