2015-05-11 21 views
2

我想獲得與正則表達式匹配的所有文檔。PouchDb通過Id匹配正則表達式獲取所有文檔

例如我有以下DOC IDS:

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

你使用什麼樣的正則表達式?你能提供更多的信息嗎? –

回答

1

你需要使用allDocs()獲取您的所有文檔,然後在內存中使用JavaScript進行過濾。

這需要將整個數據庫讀入內存,但PouchDB無法在正則表達式上編制索引,因此您必須這麼做!否則,您可以設計您的ID,以便按照其他評論者所述的方式進行前綴搜索。

+0

好吧,謝謝,現在正在做。我是否必須驗證這種好的答案,但不能解決我的問題? – sylvain1264

+0

我很抱歉,您覺得它不能解決您的問題。實際上,大多數數據庫不允許你使用正則表達式進行索引,所以實際上當你進行「正則表達式」搜索(或者SQL中的LIKE查詢)時,事實上數據庫正在做一個完整的表掃描,然後返回結果,您可以用同樣糟糕的性能自行完成結果。 :)我知道的唯一的數據庫可以索引這種「模糊」的查詢是Lucene/Solr:http://blog.mikemccandless.com/2011/03/lucenes-fuzzyquery-is-100-times-faster。 HTML – nlawson

2

這可以通過前綴來獲得文件爲 例如

localDB.allDocs({ 
      include_docs: true, 
      startkey: "p0", 
      endkey: "p0\uffff" 
     },...); 

上面的代碼給你所有文件,該文件是_id開始P0。

參考鏈接 https://github.com/nolanlawson/pouchdb-quick-search#autosuggestions-and-prefix-search

+0

這段代碼會得到「p0」和「p0/e0」,這不是我想要的。 – sylvain1264

+0

你可以去過濾功能,並在那裏你可以定義你的邏輯 –

+1

我知道過濾功能的複製,但如何使用它來檢索文檔?我是否需要使用include_docs獲取所有文檔id:false,將結果應用於我的過濾器,然後使用鍵匹配選項執行第二個請求? – sylvain1264

相關問題