2015-02-10 49 views
0

我有一個CouchDB數據庫大約一百萬行。我想要使​​用外部json中存在的鍵來查詢數據庫中的特定行。 下面是我在做什麼,現在來完成這個任務:嵌入JSON在JavaScript查詢在couchdb

for i in test_json: 
       view = ViewDefinition('state', state_name.lower(),"""{function (doc){ 
       if(doc._id == """+i+"""){ 
       emit(doc._id,[doc.user_location,doc.user_project_links]) 
        }}}""") 
       view.sync(db) 
       db.commit() 

但是,這創造了從JSON來查詢每一個輸入一個單獨的視圖。

所以這裏是我的問題: 有沒有一種方法可以解析CouchDB中javascript查詢中的json,以便最終創建單個視圖?

回答

1

您不應每次創建新視圖。這是CouchDB的強大功能 - 保存的視圖被索引並執行得非常快。如果您在數百萬個文檔(不是行,這不是RDBMS)上創建新視圖,那麼索引它們需要一些時間。 您應該在CouchDB中通過例如Futon創建一次視圖。 您的視圖的地圖功能應該是這個樣子:

function(doc) { 
    emit(doc._id, [doc.user_location,doc.user_project_links]) 
} 

接下來,你可以通過按鍵查詢查詢數據庫。您傳遞單個密鑰:{key = value},多個密鑰:{keys:{...}}或使用startkeyendkey參數。這些鍵會根據您的emit語句中的鍵(在本例中爲doc._id)進行過濾。

看看這裏:http://guide.couchdb.org/draft/views.html

另外,請記住,如果您需要訪問文檔的多個字段,最好從視圖中排除文檔,並在查詢中使用include_docs=true。您將始終在響應中包含密鑰和文檔ID,因此y可以使用後者來檢索文檔。您發出的值實際上是視圖的一部分,並佔用額外的磁盤空間。

希望這會有所幫助。