【问题标题】:How to add a key value in couchbase where the value is derived from an already existing key value in the document如何在 couchbase 中添加一个键值,其中该值是从文档中已经存在的键值派生的
【发布时间】:2020-04-21 07:12:28
【问题描述】:

我在 couchbase 中有一个 json 文档,其结构如下所示

"root": {
          "type": "TEST",
          "parameters": {
            "numbers": [
              "1",
              "2-001",
              "3",
              "2-001",
              "5-002"
           ] 
          }
        }

我需要添加一个新的键值对并使文档看起来像这样

"root": {
          "type": "TEST",
          "parameters": {
            "numbers": [
              "1",
              "2-001",
              "3",
              "2-001",
              "5-002"
           ],
          "unique": [
              "1",
              "2",  
              "3",
              "5"
          ] 
         }
        }

我应该去掉 - 之后的所有内容,并选择其中存在的独特元素。

【问题讨论】:

  • 你想用 N1QL 做这个吗?

标签: sql json database couchbase


【解决方案1】:

如果您想使用 N1QL 执行此操作,您可以将 ARRAY 转换与 ARRAY_DISTINCT 结合使用。转变将取决于您。您可以使用REGEXP_ functions 之一或SPLIT 之类的简单方法。例如:

select ARRAY_DISTINCT(ARRAY SPLIT(v,"-")[0] FOR v IN d.root.parameters.numbers END) as `unique`, d.root.parameters.numbers
from mybucket d;

这将返回表单中的文档:

[
  {
    "numbers": [
      "1",
      "2-001",
      "3",
      "2-001",
      "5-002"
    ],
    "unique": [
      "1",
      "2",
      "3",
      "5"
    ]
  }
]

如果您想实际更改文档,可以将 SELECT 设置为 UPDATE

UPDATE mybucket
SET root.`unique` = ARRAY_DISTINCT(ARRAY SPLIT(v,"-")[0] FOR v IN root.parameters.numbers END)
where root.`unique` is missing;

【讨论】:

  • TIL N1QL 读作“镍”
猜你喜欢
  • 1970-01-01
  • 2013-01-06
  • 2019-02-16
  • 1970-01-01
  • 1970-01-01
  • 2012-07-08
  • 2021-11-06
  • 1970-01-01
  • 2020-12-10
相关资源
最近更新 更多