我有关于couchdb中视图的问题目前,我有许多视图(例如,视图_a、视图_B……视图_Z),对于每个视图,它们包含相同范围的键,但具有不同的值。即:
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}
我希望有一个视图来表示视图_a中的值除以视图_B=>中的数值
view_A_over_B = {"key":"key_1", "value":2}, {"key":"key_2", "value":50}
表示视图_C中值乘以视图_B=>中值的视图
view_C_times_B = {"key":"key_1", "value":5}, {"key":"key_2", "value":4}
有一个map/reduce函数可以调用视图并像上面提到的那样进行计算吗?
由于不清楚如何构建视图,因此可以使用列表函数而不是视图来构建所需的结果。列表函数的功能更强,但您需要负责输出结果(如HTML、Json等)。
View函数在文档保存期间只运行一次。
您可以定义计算所需数字的javascript函数,而不是在视图中包含以下内容:
视图_A:
...
emit(doc._id, funcA(doc));
...
视图B:
...
emit(doc._id, funcB(doc));
...
视图_C:
...
emit(doc._id, funcC(doc));
...
视图_A_over_B:
...
emit(doc._id, funcA(doc)/funcB(doc));
...
视图_C_times_B:
...
emit(doc._id, funcC(doc)*funcB(doc));
...
您可以使用CommonJS模块来定义funcA、funcB和funcC。或者使用过时的宏。
前面已经提到,不可能针对其他视图使用视图,最大限度地,您可以将一些列表功能应用于特定视图(以完全扫描处理的复杂性为代价),但您仍然可以查看第三方工具,如Couch Incarnate,以获得链接视图支持。此外,Cloudant还支持链接视图。