如何将 couchbase 视图输出提供给另一个视图?

How do I feed couchbase view output into another view?

假设我有一组不同类型的文档,它们都包含一个日期字段。我正在寻找给定类型文档的 max(date)。但是,日期在每个文档中只存在一次。这意味着单个视图只能为每个文档输出 max(date)。

[{1,date},{1,date},{1,date},{2,date},{2,date}]

所以理论上,如果我能够 运行 对此输出进行额外查看,我可以轻松获得我需要的输出。

[{1,date},{2,date}]

我可以通过查询第一个视图并创建一个新文档来完成此操作,然后第二个视图将使用该文档。由于现在每个文档都有多个日期,因此聚合有效。

然而,这根本不是动态的,并且增加了很多开销——基本上违背了最初从简单 n1ql 切换的目的。

有没有什么方法可以在 couchbase 中链接/嵌套/增加视图?

Jacob,你可以使用 N1QL 进行分页:

SELECT max(date) FROM testbucket WHERE type = 'mytype' GROUP BY grp LIMIT 10 OFFSET 100

您也可以按如下方式定义视图:

map: emit(doc.id, doc.date)

reduce: _stats

built-in _stats reduce function 将发出许多有用的值,包括最大值,这可能就是您要查找的值。

您还可以定义一个自定义的reduce 函数。更多细节出现在这里: https://developer.couchbase.com/documentation/server/current/views/views-writing.html

一般来说,N1QL 方法应该是首选,除了一些需要视图 map/reduce 能力 的特殊情况。从问题描述来看,通过N1QL应该可以完成你所需要的。