pouchdb-find + $in : 找不到匹配的索引
pouchdb-find + $in : no matching index found
我有一个名为 'tileId' 的辅助非唯一键,我想将其用于搜索。因此,我创建了以下索引:
this.pouchDB.createIndex({
index: {
fields: ['tileId']
}
});
然后当我使用以下选择器时它工作正常:
selector: {tileId: 1234567}
但是当我尝试使用以下选择器搜索值列表时,它可以工作,但会发出有关未找到匹配索引的警告:
selector: {tileId: {$in, [1234567, 2345678]}}
- 我做错了什么以及我应该更改什么来查询文档,其中 (tileId === 1234567) OR (tileId === 2345678) OR (tileId === ... 来自数组)?
最后,我想在这个查询中添加几个类似的字段来得到这样的结果:
selector: {tileId: {$in, [1234567, 2345678]},
category: {$in, [list of categories]},
subcategory: {$in, [list of subcategories]}
}
是否可行,如何实现?
据我了解,PouchDB Find 的当前实现仅对连续键(在本例中为 tileId
值)使用索引。如果您指定一个查询,该查询通过 tileId
查询一组不同的记录,例如使用 $or
或 $in
子句,(非常基本的)查询计划器选择根本不使用 tileId
作为索引扫描的基础。
我认为您最好发出多个查询,而不是对 tileId
使用 $in
。如果具有指定 tileId
的文档数量适中,则额外的过滤器可能相对便宜。
我有一个名为 'tileId' 的辅助非唯一键,我想将其用于搜索。因此,我创建了以下索引:
this.pouchDB.createIndex({
index: {
fields: ['tileId']
}
});
然后当我使用以下选择器时它工作正常:
selector: {tileId: 1234567}
但是当我尝试使用以下选择器搜索值列表时,它可以工作,但会发出有关未找到匹配索引的警告:
selector: {tileId: {$in, [1234567, 2345678]}}
- 我做错了什么以及我应该更改什么来查询文档,其中 (tileId === 1234567) OR (tileId === 2345678) OR (tileId === ... 来自数组)?
最后,我想在这个查询中添加几个类似的字段来得到这样的结果:
selector: {tileId: {$in, [1234567, 2345678]}, category: {$in, [list of categories]}, subcategory: {$in, [list of subcategories]} }
是否可行,如何实现?
据我了解,PouchDB Find 的当前实现仅对连续键(在本例中为 tileId
值)使用索引。如果您指定一个查询,该查询通过 tileId
查询一组不同的记录,例如使用 $or
或 $in
子句,(非常基本的)查询计划器选择根本不使用 tileId
作为索引扫描的基础。
我认为您最好发出多个查询,而不是对 tileId
使用 $in
。如果具有指定 tileId
的文档数量适中,则额外的过滤器可能相对便宜。