我想获取id与正则表达式匹配的所有文档。
例如,我有以下文档ID:
p0
p0/e0
p1
p1/e0
我怎样才能得到p0和p1?正则表达式将是/ ^ p [0-9] + $ /
目前我可以执行两个请求,但我只想使用一个:
This.db.allDocs({
include_docs: false
}).then(function(result){
// Find all ids matching /^p[0-9]+$/
var iDoc = result.rows.length;
while(iDoc--){
if(result.rows[iDoc].id.match(/^p[0-9]+$/)){
projectsIds.push(result.rows[iDoc].id);
}
}
// Get all documents with ids matching /^p[0-9]+$/
This.db.allDocs({
include_docs: true,
keys: projectsIds
}).then(function(result) {
var iProject = result.rows.length;
var docs = [];
while (iProject--) {
docs[iProject] = result.rows[iProject].doc;
}
projects.resolve(docs);
});
});
答案 0 :(得分:4)
这可以通过前缀来获取文件 示例
localDB.allDocs({
include_docs: true,
startkey: "p0",
endkey: "p0\uffff"
},...);
上面的代码为您提供_id以p0开头的所有文档。
参考链接 https://github.com/nolanlawson/pouchdb-quick-search#autosuggestions-and-prefix-search
答案 1 :(得分:1)
您需要使用allDocs()
获取所有文档,然后使用JavaScript在内存中进行过滤。
这需要将整个数据库读入内存,但PouchDB无法在正则表达式上编制索引,因此您需要做的就是这样!否则,您可以设计您的ID,以便按照其他评论者的描述更容易进行前缀搜索。
答案 2 :(得分:0)
几年后,看来pouchdb-find
插件可能有所帮助(我想由@nlawson编写)。这是有关使用它进行查询的Pouch文档... https://pouchdb.com/api.html#query_index
以及您将如何做:
async test()
let result = await This.db.find({
selector: {_id: {$regex: '^p[0-9]+$'}}
});
let docs = result.rows.map( row => row.doc )
console.dir(docs)
}
(我使它异步,所以您不必费心使用回调)
您可以在pouchdb查找插件的site上自己尝试一下。
虽然性能可能很糟糕,但我还没有尝试过。 @nlawson似乎认为索引上的正则表达式不能很快完成,他肯定比大多数人都了解。
编辑:我刚刚检查了上面提到的Pouch文档,并且在查找过程中肯定使用了索引,因此性能可能还可以。