couchdb mapreduce查询多个键的交集

时间:2017-06-01 09:04:03

标签: mapreduce couchdb

我操纵包含任意元数据字典的文档,我想根据元数据搜索文档。

到目前为止,我的方法是从元数据构建索引。对于每个文档,我插入每个(key,value)对元数据字典。

var metaIndexDoc = {
  _id: '_design/meta_index',
  views: {
    by_meta: {
      map: function(doc) {
        if (doc.meta) {
          for (var k in doc.meta) {
            var v = doc.meta[k];
            emit(k,v);
          }
        }
      }.toString()
    }
  }
};

这样,我可以查询具有元数据date的所有文档,并根据与date关联的值对结果进行排序。到目前为止,非常好。

现在,我想根据多个条件进行查询:在元数据中包含dateimportant的文档。从我到目前为止收集到的内容来看,我构建索引的方式似乎不允许这样做。我可以创建一个以['date', 'important']为键的新索引,但是当我添加新的元数据键时,索引的数量会呈指数级增长。

我还读到了使用一种新文档来存储文档X具有元数据(键,值)的事实,这肯定是你在关系数据库中的方式,但我宁愿拥有自包含的文档如果可能的话。

现在,我正考虑保留我的metaIndex,为date创建一个查询,为important创建一个查询,然后使用underscore.intersection计算两个列表的交集

我错过了什么吗?

编辑:在与@alexis讨论后,我重新考虑了在需要时创建自定义索引的选项,并让PouchDB管理它们。事实上,随着元数据字段数量的增加,可能的组合数量将呈指数级增长,但只要索引仅在需要时创建,我想我很高兴...... / p>

0 个答案:

没有答案