gpt4 book ai didi

java - MapReduce Couchdb

转载 作者:行者123 更新时间:2023-12-01 15:42:51 25 4
gpt4 key购买 nike

我有一个带有 couch db 的简单数据库。我的用户有该字段:

String userName
String password
String mail
boolean admin

我将我的用户保留在数据库中。然而我对 Couch DB 和 NoSql 很陌生。我怎样才能用一个例子来实现 map 缩减(或者它是在内部完成的,我不需要做任何事情?)

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

最佳答案

您的问题可以使用更多细节,但据我了解,您想要创建一个类似于用户“表”的 Couch DB 文档。为此,您需要在 Couch DB 上创建一个具有以下属性的 JSON 文档:

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

正如 lukecampbell 上面指出的那样,您需要创建自己的“类型”属性来标识每个实体...例如,您可以只更改“”,而不是使用管理属性来标识具有权限的用户类型”属性:

{
type: "admin"...
}

要查询数据库并检索特定文档,您需要使用 map 函数。卢克坎贝尔的例子再次提供了一个很好的起点:

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

此“查询”将为您提供每个“用户”实体文档的“ View ”,按“doc.name”排序。这就是 Couch DB 的魅力变得显而易见的地方...Map(和reduce)函数在某种意义上就像 SQL 查询...但是因为它们是用 JavaScript 编写的,所以您可以使用 JavaScript 逻辑来塑造您的数据库:

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

这将为您提供每个用户名为 John 的“用户”文档的 View 。正如您所看到的,在某些情况下,以这种方式编写查询比 SQL 更具表现力...甚至可以以这种方式“隐藏”类型文档字段;

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

这个“查询”应该打印出每个“用户”的名称,以及每个用户文档的一个小状态消息(“Is Admin?:true(或 false)”),其中包含 admin 属性的 boolean 值。至于“Reduce”函数,它们非常有用,但更重要的是首先完全理解映射函数,因为它们非常通用,并且在大多数情况下,编写良好的映射函数将消除编写“reduce”函数的需要...

Couch DB 具有巨大的潜力。这个网站可能是最好的起点; http://guide.couchdb.org/index.html - 也就是说,该技术中也有一些非常奇怪的怪癖,有时会迫使您重新考虑数据库设计...这里简要讨论其中一个怪癖(请参阅 Victor Nicollet 的回答):

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

关于java - MapReduce Couchdb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7741047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com