如何将 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应该可以完成你所需要的。
假设我有一组不同类型的文档,它们都包含一个日期字段。我正在寻找给定类型文档的 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应该可以完成你所需要的。