4

我对 couchdb 中的视图有疑问 目前,我有许多视图(例如 view_A、view_B ....view_Z),对于每个视图,它们包含相同范围的键但具有不同的值。IE:

view_A = {"key":"key_1", "value":10}, {"key":"key_2", "value":100}
view_B = {"key":"key_1", "value":5}, {"key":"key_2", "value":2}
view_C = {"key":"key_1", "value":1}, {"key":"key_2", "value":2}

我期望有一个视图来表示 view_A 中的值除以 view_B 中的值 =>

view_A_over_B = {"key":"key_1", "value":2}, {"key":"key_2", "value":50}

表示 view_C 中的值乘以 view_B 中的值的视图 =>

view_C_times_B = {"key":"key_1", "value":5}, {"key":"key_2", "value":4}

这是否有可能有一个调用视图并像上面提到的那样进行计算的 map/reduce 函数?

4

3 回答 3

2

CouchDB 中的视图只能访问当前正在处理的文档,而不能访问其他文档或来自其他视图的数据。因此,不幸的是,不可能使用 CouchDB 中的视图来构建您想要的功能。

由于不清楚您是如何构建视图的,因此可以使用List函数而不是视图来构建您需要的结果。列表函数功能更强大,但您随后负责输出结果(如 HTML、Json 等)。

于 2013-08-06T15:43:30.453 回答
1

查看功能在文档保存期间只运行一次。

您可以定义计算所需数字的 javascript 函数,而不是在视图中包含以下内容:

视图_A:

...
emit(doc._id, funcA(doc));
...

视图_B:

...
emit(doc._id, funcB(doc));
...

视图_C:

...
emit(doc._id, funcC(doc));
...

view_A_over_B:

...
emit(doc._id, funcA(doc)/funcB(doc));
...

view_C_times_B:

...
emit(doc._id, funcC(doc)*funcB(doc));
...

您可以使用CommonJS 模块来定义 funcA、funcB 和 funcC。或者使用过时的宏

于 2013-08-08T10:04:12.070 回答
1

已经提到不可能将视图与其他视图一起使用,您最多可以将一些列表功能应用于特定视图(以全扫描处理复杂性为代价),但您仍然可以查看第三方工具,例如Couch -Incarnate链式视图支持。此外,Cloudant还支持链式视图

于 2013-08-08T16:16:40.943 回答