假设我的数据库中包含以下数据:
[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中是否可以使用这样的东西。
答案 0 :(得分:0)
您可以做的是使用CouchDB的标准MapReduce功能。 Map是放在视图中的函数,用于查找数据。您可以使用各种条件来查找所需的文档。接下来,如果在查询中使用reduce = true指定so,则会对匹配映射条件的每个文档执行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函数的一个很好的理由是你可以使用查询字符串向它传递参数,在你的情况下它可能是你想要计算距离的点。
有关列表功能的详细说明,请查看此处: http://guide.couchdb.org/draft/transforming.html
希望这有帮助。