couchdb视图使用另一个视图



我有关于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函数可以调用视图并像上面提到的那样进行计算吗?

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

由于不清楚如何构建视图,因此可以使用列表函数而不是视图来构建所需的结果。列表函数的功能更强,但您需要负责输出结果(如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还支持链接视图。

相关内容

  • 没有找到相关文章

最新更新