Couchbase - 获取所有文档前缀

标签 couchbase n1ql

我们有一个相当大的 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/

相关文章:

java - 如何使用 couchbase SearchQuery 查询两组参数

elasticsearch - Couchbase - Elasticsearch 搜索问题

couchbase - 使用 N1QL 查询同步网关桶

couchbase - 如何在 couchbase 服务器的 N1QL 中跟踪查询执行时间?

nosql - 在无模式数据库中迁移数据格式的好方法是什么?

nosql - CouchDB 和 Couchbase 的区别

json - 如何从Couchbase查询深度嵌套的JSON值?

沙发底座 N1QL : Retrieve documents that do not have a specific field

http - 如何在nifi中使用invoke http来执行GET请求?

arrays - Couchbase:在包含对象数组的数组上创建索引