在 firestore [通配符] 中为点注释动态路径创建索引?
Creating indexing for dot annotated dynamic path in firestore [Wildcard]?
我的 collection 创建如下:
-products
-productID
-category [object]
catitem1 - boolean
catitem2 - boolean
现在我写了一个查询如下
this.afs.collection<Product>('products', ref =>
ref
.where(`category.${categoryName}`, '==', true)
.limit(limit)
);
这个查询工作正常,但是当我将 orderBy 添加到上面的查询时,我被要求为查询创建一个 index
。
this.afs.collection<Product>('products', ref =>
ref
.where(`category.${categoryName}`, '==', true)
.orderBy('createdDate','desc')
.limit(limit)
);
由于 categoryName
可以创建并可以随时更改,我应该为每个 categoryName 添加索引,这将以数百为单位。
有什么方法可以为 category.categoryName
创建通配符索引?
我尝试使用 category.*
,但这是不可接受的。希望能在这里找到一些帮助。
自从提出这个问题后,Firestore 实施了各种运算符来帮助 querying for array membership。在撰写本文时可用的运算符有:array-contains
、array-contains-any
、in
和 not-in
.
不是将 category
存储为一个 object
,每个 categoryName
有一个 Boolean
属性,你可以有一个 categories
数组仅 包含产品所属类别的 String
个名称(或者,如果您想保存 space,Int
个 ID) .
查询可以像这样工作,只需要一个索引:
this.afs.collection<Product>('products', ref =>
ref
.where('categories', 'array-contains', categoryName)
.orderBy('createdDate','desc')
.limit(limit)
);
我的 collection 创建如下:
-products
-productID
-category [object]
catitem1 - boolean
catitem2 - boolean
现在我写了一个查询如下
this.afs.collection<Product>('products', ref =>
ref
.where(`category.${categoryName}`, '==', true)
.limit(limit)
);
这个查询工作正常,但是当我将 orderBy 添加到上面的查询时,我被要求为查询创建一个 index
。
this.afs.collection<Product>('products', ref =>
ref
.where(`category.${categoryName}`, '==', true)
.orderBy('createdDate','desc')
.limit(limit)
);
由于 categoryName
可以创建并可以随时更改,我应该为每个 categoryName 添加索引,这将以数百为单位。
有什么方法可以为 category.categoryName
创建通配符索引?
我尝试使用 category.*
,但这是不可接受的。希望能在这里找到一些帮助。
自从提出这个问题后,Firestore 实施了各种运算符来帮助 querying for array membership。在撰写本文时可用的运算符有:array-contains
、array-contains-any
、in
和 not-in
.
不是将 category
存储为一个 object
,每个 categoryName
有一个 Boolean
属性,你可以有一个 categories
数组仅 包含产品所属类别的 String
个名称(或者,如果您想保存 space,Int
个 ID) .
查询可以像这样工作,只需要一个索引:
this.afs.collection<Product>('products', ref =>
ref
.where('categories', 'array-contains', categoryName)
.orderBy('createdDate','desc')
.limit(limit)
);