pouchdb-find + $ in:找不到匹配的索引

时间:2018-08-06 13:12:34

标签: nosql couchdb pouchdb

我有一个名为'tileId'的辅助非唯一密钥,我想用它来进行搜索。因此,我创建了以下索引:

this.pouchDB.createIndex({
  index: {
          fields: ['tileId']
         }
  });

然后,当我使用以下选择器时,它工作正常:

selector: {tileId: 1234567}

但是当我尝试使用以下选择器搜索值列表时,它可以工作,但会发出警告,提示找不到匹配的索引:

selector: {tileId: {$in, [1234567, 2345678]}}
  1. 我在做什么错了,应该如何更改以查询文档,其中(tileId === 1234567)OR(tileId === 2345678)OR(tileId === ...数组中的任何其他值) ?
  2. 最后,我想向此查询添加更多类似的字段,以获得类似这样的内容:

    selector: {tileId: {$in, [1234567, 2345678]},
               category: {$in, [list of categories]},
               subcategory: {$in, [list of subcategories]}
              }
    

    这可行吗?

1 个答案:

答案 0 :(得分:1)

据我了解,PouchDB Find的当前实现仅对连续键(在这种情况下为tileId值)使用索引。如果您指定一个查询,以tileId来查询一组不同的记录,例如(非常基础的)查询计划人员使用$or$in子句选择完全不使用tileId作为索引扫描的基础。

我认为您最好发布多个查询,而不是对$in使用tileId。如果带有指定tileId的文档数量适中,则附加过滤器可能相对便宜。