假设我的数据库中有以下数据:
[1,2],[2,1],[1,3],[3,1]...这些数字是否表示公式a*x+b的a和b值
我现在想要的是一个查询,它将差值返回给给定点x,y。
例如:给出了点2,6。我希望我的查询返回
[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中是否可能发生。
发布于 2015-02-18 01:04:50
您可以做的是使用CouchDB的标准MapReduce功能。Map是放在视图中的函数,它可以查找数据。你可以有不同的标准来定位你需要的文档。接下来,如果您在with reduce=true的查询中指定了这一点,那么将对匹配映射条件的每个文档执行reduce函数。您可以使用JavaScript对文档值执行各种操作。在您的示例中,地图可能如下所示:
function(doc) {
if(doc.a && doc.b) {
emit(doc._id,[doc.a, doc.b]);
}
}然后,reduce被调用,如下所示:
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
希望这能有所帮助。
https://stackoverflow.com/questions/28557840
复制相似问题