Nosql 数据库查找+$中:未找到匹配的索引

Nosql 数据库查找+$中:未找到匹配的索引,nosql,couchdb,pouchdb,Nosql,Couchdb,Pouchdb,我有一个名为“tileId”的非唯一辅助密钥,我想用它进行搜索。因此,我创建了以下索引: this.pouchDB.createIndex({ index: { fields: ['tileId'] } }); 当我使用以下选择器时,它工作正常: selector: {tileId: 1234567} 但是,当我尝试使用以下选择器搜索值列表时,它会起作用,但会给出一个关于找不到匹配索引的警告: selector: {tileId: {$in, [

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

this.pouchDB.createIndex({
  index: {
          fields: ['tileId']
         }
  });
当我使用以下选择器时,它工作正常:

selector: {tileId: 1234567}
但是,当我尝试使用以下选择器搜索值列表时,它会起作用,但会给出一个关于找不到匹配索引的警告:

selector: {tileId: {$in, [1234567, 2345678]}}
  • 我做错了什么?我应该更改什么来查询文档,其中(tileId==1234567)或(tileId==2345678)或(tileId===…数组中的任何其他值)
  • 最后,我想在此查询中添加几个类似的字段,以获得如下结果:

    selector: {tileId: {$in, [1234567, 2345678]},
               category: {$in, [list of categories]},
               subcategory: {$in, [list of subcategories]}
              }
    
    它可行吗?如何可行


  • 据我所知,PockDB Find的当前实现仅使用连续键的索引(在本例中为
    tileId
    值)。如果指定一个查询,通过
    tileId
    查询一组不同的记录,例如在
    子句中使用
    $或
    $,则(非常基本的)查询计划器选择根本不使用
    tileId
    作为索引扫描的基础


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

    好的,谢谢您的回答。不过,我希望既然他们有这个“$in”限定符,就应该有一种优雅地使用它的方法。您认为,有没有一种方法可以通过map/reduceapi使其工作?