我们有一个相当大的 couchbase 存储桶,其中包含多种文档类型,由文档前缀表示。例如,我们有一些文档以device---[document name]
为前缀,一些以market---[document name]
为前缀。我想要所有现有前缀的列表。到目前为止,这是我尝试过的:
select split(meta().id, "---")[0] as doc_type
from configs
group by doc_type;
我希望它返回类似的东西
[
{
"doc_type": "device"
},
{
"doc_type": "market"
},
]
它失败了
"code": 4210,
"msg": "Expression must be a group key or aggregate: (split((meta(`docsis_configs`).`id`), \"---\")[0])",
我不确定如何解决聚合问题并尝试了各种方法。但是我怀疑即使我让它工作,这个查询也会非常低效。有人可以帮我聚合吗?有没有更聪明的方法来做到这一点?或者这样可以吗?
最佳答案
您还可以使用下面的事件服务,这是一些简单的代码,可以为每个唯一的前缀创建一个计数器文档。这将为您拥有的每个文档更新一个计数器。
注意 dst_bkt 是一个桶,在 r+w 模式下绑定(bind)到另一个桶,这个桶应该开始是空的,它会得到一个包含计数的每个前缀的文档。
这也可以在没有和索引的情况下工作。
function OnUpdate(doc, meta) {
var pfx = meta.id.split("---");
if (!pfx[1]) return; // bad key so return and skip
couchbase.increment(dst_bkt,{"id": pfx[0] });
}
请注意,如果您只想将其作为一次性工具运行(无计数),则有一个非标准的 hack 可以显着提高性能,如果有兴趣请私信我。
关于Couchbase - 获取所有文档前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68687246/