2011-10-12 55 views
0

我有沙發DB一個簡單的數據庫。我有用戶有這個字段:的Map Reduce沙發Db的

String userName 
String password 
String mail 
boolean admin 

我讓我的用戶在db。不過,對於Couch DB和NoSql我是如此的新鮮。我如何能實現地圖上減少一個例子(或它內部做到這一點,我並不需要做什麼嗎?)

我使用Spring 3和Ekorp我的應用程序。

回答

0

在沙發上, 在您的文檔稱爲

_type

type_

添加一個字段的地圖功能可以

function(doc) { 
if(doc.type_=="user") { 
    emit(doc.name,doc._id); 
} 
} 
1

您的問題可以使用更多的細節,但據我所知,您要創建一個像用戶的「表」一樣的Couch DB文檔。要做到這一點,你需要將你的沙發上DB創建一個JSON文件具有以下屬性:

{ 
    type: "user", 
    username: "John", 
    password: "*****", 
    mail: "blah, blah, blah", 
    admin: true 
} 

正如lukecampbell了上面所指出的,你需要創建自己的「類型」屬性來識別每個實體...例如,而不是使用管理員屬性來識別用戶的權限,你可以只改變「類型」屬性:

{ 
    type: "admin"... 
} 

查詢數據庫,並檢索特定的文件,你需要使用地圖功能。 再次lukecampbell的例子提供了一個很好的起點:

function(doc){ 
    if(doc.type == "user"){ 
     emit(doc.name, doc); 
    } 
} 

這個「查詢」會給你的每一個「用戶」的實體文件的「觀點」,由「doc.name」命令。這裏就是DB沙發的美變得明顯...地圖(減少)的功能就像是在一定意義上的SQL查詢......但因爲他們是用JavaScript編寫的,您可以使用JavaScript邏輯來塑造你的數據庫:

function(doc){ 
    if(doc.type == "user" && doc.name == "John"){ 
     emit(doc.name, doc); 
    } 
} 

這會給你每一個「用戶」文件,其中用戶名是約翰的看法。 正如您所看到的,在某些情況下,以這種方式編寫查詢可能比SQL更具表現力......甚至有可能以這種方式「填鴨」類型的文檔字段;

function(doc){ 
    if(
     doc.type == "user" && 
     typeof doc.admin == "boolean" 
    ){ 
     emit(doc.name, "Is Admin?: " + JSON.stringify(doc.admin); 
    } 
} 

這個「查詢」應打印出每個「用戶」和一點點的狀態消息的名稱(「是admin?:真(假)」),用於爲admin一個布爾值,每個用戶文件屬性。至於「減少」的功能,它們是非常有用的,但要充分首先了解地圖功能,它更重要的,因爲它們非常靈活,而且在大多數情況下,良好的書面地圖功能將避免需要寫一個「減少」功能...

有在沙發DB的潛在負荷。這個網站可能是最好的開始; http://guide.couchdb.org/index.html - 儘管如此,也有在偶爾會迫使你重新考慮你的數據庫設計技術的一些很奇怪的怪癖......其中的一個怪癖這裏簡要討論(見維克多尼科萊特的答案):

Is there anything wrong with creating Couch DB views with null values?