我有一个带数据库db的简单数据库。我有用户拥有该字段:
String userName
String password
String mail
boolean admin
我将用户留在db。但是我对Couch DB和NoSql这么新。如何通过示例实现map reduce(或者它是否在内部执行,我不需要做任何事情?)
我将Spring 3和Ekorp用于我的应用程序。
答案 0 :(得分:1)
您的问题可以使用更多细节,但据我了解,您希望创建一个像用户“表”一样的Couch DB文档。为此,您需要在Couch DB上创建一个JSON文档,其中包含以下属性:
{
type: "user",
username: "John",
password: "*****",
mail: "blah, blah, blah",
admin: true
}
就像上面提到的lukecampbell一样,你需要创建自己的“type”属性来识别每个实体...例如,你可以改变“你可以改变”,而不是使用admin属性来识别具有权限的用户。输入“property:
{
type: "admin"...
}
要查询数据库并检索特定文档,您需要使用map函数。 再一次,lukecampbell的例子提供了一个很好的起点:
function(doc){
if(doc.type == "user"){
emit(doc.name, doc);
}
}
此“查询”将为您提供“每个”用户“实体文档的”视图“,按”doc.name“排序。在这里,Couch DB的美丽变得明显...... Map(和reduce)函数就像在某种意义上的SQL查询一样......但是因为它们是用JavaScript编写的,所以你可以使用JavaScript逻辑来塑造你的数据库:
function(doc){
if(doc.type == "user" && doc.name == "John"){
emit(doc.name, doc);
}
}
这将为您提供用户姓名为John的每个“用户”文档的视图。 正如您所看到的,在某些情况下,以这种方式编写查询可能比SQL更具表现力......甚至可以以这种方式“躲避”类型的文档字段;
function(doc){
if(
doc.type == "user" &&
typeof doc.admin == "boolean"
){
emit(doc.name, "Is Admin?: " + JSON.stringify(doc.admin);
}
}
此“查询”应为每个用户文档打印出每个“用户”的名称和一个小状态消息(“是管理员?:真(或假)”),并为admin属性提供布尔值。至于“Reduce”函数,它们非常有用,但是首先完全理解map函数更为重要,因为它们非常通用,并且在大多数情况下,编写良好的map函数将不需要编写“reduce”函数...
Couch DB有潜力。这个网站可能是最好的起点; http://guide.couchdb.org/index.html - 也就是说,技术中也存在一些非常奇怪的怪癖,偶尔会迫使你重新思考你的数据库设计......其中一个怪癖会在这里简要讨论(参见Victor Nicollet的回答):
Is there anything wrong with creating Couch DB views with null values?
答案 1 :(得分:0)
在沙发上, 在文档中添加一个名为
的字段type
或
输入_p>
地图功能可以是
function(doc) {
if(doc.type_=="user") {
emit(doc.name,doc._id);
}
}