我操纵包含任意元数据字典的文档,我想根据元数据搜索文档。
到目前为止,我的方法是从元数据构建索引。对于每个文档,我插入每个(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
关联的值对结果进行排序。到目前为止,非常好。
现在,我想根据多个条件进行查询:在元数据中包含date
和important
的文档。从我到目前为止收集到的内容来看,我构建索引的方式似乎不允许这样做。我可以创建一个以['date', 'important']
为键的新索引,但是当我添加新的元数据键时,索引的数量会呈指数级增长。
我还读到了使用一种新文档来存储文档X具有元数据(键,值)的事实,这肯定是你在关系数据库中的方式,但我宁愿拥有自包含的文档如果可能的话。
现在,我正考虑保留我的metaIndex,为date
创建一个查询,为important
创建一个查询,然后使用underscore.intersection
计算两个列表的交集
我错过了什么吗?
编辑:在与@alexis讨论后,我重新考虑了在需要时创建自定义索引的选项,并让PouchDB管理它们。事实上,随着元数据字段数量的增加,可能的组合数量将呈指数级增长,但只要索引仅在需要时创建,我想我很高兴...... / p>