首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过键输入计算的值的Couchdb查询

通过键输入计算的值的Couchdb查询
EN

Stack Overflow用户
提问于 2015-02-17 16:43:28
回答 1查看 674关注 0票数 2

假设我的数据库中有以下数据:

代码语言:javascript
复制
[1,2],[2,1],[1,3],[3,1]...

这些数字是否表示公式a*x+b的a和b值

我现在想要的是一个查询,它将差值返回给给定点x,y。

例如:给出了点2,6。我希望我的查询返回

代码语言:javascript
复制
[1,2] = -2 (1*2+2=4  4-6=-2)
[2,1] = -1 (2*2+1=5  5-6=-1)
[1,3] = -1 (1*2+3=5  4-6=-1)
[3,1] =  1 (3*2+1=7  7-6=-1)

我知道如何在SQL中做到这一点,但是数据已经在couchdb中。我是NoSQL世界的新手,我想知道这样的事情在couchdb中是否可能发生。

EN

回答 1

Stack Overflow用户

发布于 2015-02-18 01:04:50

您可以做的是使用CouchDB的标准MapReduce功能。Map是放在视图中的函数,它可以查找数据。你可以有不同的标准来定位你需要的文档。接下来,如果您在with reduce=true的查询中指定了这一点,那么将对匹配映射条件的每个文档执行reduce函数。您可以使用JavaScript对文档值执行各种操作。在您的示例中,地图可能如下所示:

代码语言:javascript
复制
function(doc) {
    if(doc.a && doc.b) {
        emit(doc._id,[doc.a, doc.b]);
    }
}

然后,reduce被调用,如下所示:

代码语言:javascript
复制
function(keys, values, rereduce) {
    var res;
   //do something with values...
   return res;
}

在本例中,keys将是文档ID的列表,values将是a&b字段的数组。

在调用MapReduce时(取决于访问数据库所使用的方法),应该指定reduce=true

关于MapReduce (以及视图、排序和列表函数)的好资源有:

http://guide.couchdb.org/draft/views.html http://www.slideshare.net/okurow/couchdb-mapreduce-13321353

另一种方法是在Map结果上使用list函数,如果您想以HTML格式输出结果。使用List函数的一个很好的理由是,你可以通过querystring传递参数给它,在你的例子中,它可能是你想要计算距离的点。

有关列表函数的详细描述,请查看此处:http://guide.couchdb.org/draft/transforming.html

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28557840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档