2015-06-14 73 views
0

在Couchbase Server 3.0中,在我的桶的文件的格式爲:當屬性是數組時,如何通過文檔屬性查詢?

{ "id":"xyz", "categories":["news", "articles", "etc.etc.."]} 

我想寫一個觀點,這樣當我指定鍵=「新聞」,都包括在「新聞」的文件「categories」數組屬性將被返回。

我寫了一個map函數,它發出的文章的次數與我們在「categories」數組中的元素次數一樣多。

function (doc, meta) { 
    for(var i = 0; i < doc.categories.length ; i++) 
    emit(doc.categories[i], doc); 
} 

但我堅持減少。

回答

0

原來,map函數已經足夠了,我只需要在URL中用key =「cateogoryName」來查詢。

我最初是困惑,因爲如果你不裹在你得到一個非常神祕的錯誤的查詢行情的關鍵,請參閱:https://issues.couchbase.com/browse/MB-7555

不知道reduce函數會更有效,但..

0

如果你只是想查詢數據,你不需要一個減少功能,即你可以把它留空。您只需要reduce就可以對結果集進行計算。

參見:

http://docs.couchbase.com/developer/dev-guide-3.0/built-in-reduce.html

然而,你可能會在地圖更改爲以下:

function (doc, meta) { 
    if (doc.categories) { 
    for(var i = 0; i < doc.categories.length ; i++) { 
     emit(doc.categories[i], null); 
    } 
    } 
} 

,並可能在if語句檢查一個類型。因爲沒有縮減功能,所以可以將第二個參數作爲空值。這可以在Java中查詢,例如如下(異步):

bucket.async() 
     .query(query) 
     .flatMap(AsyncViewResult::rows) 
     .flatMap(AsyncViewRow::document) 
     ...