我如何 select 并仅更新 Couchbase 中这张地图的名称值?

How do I select and update just the name values from this map in Couchbase?

我有一组文档类型:

contactId: V123132,
{
    "accessMap": {
      "136400": [
        "STANDARD"
      ],
      "136401": [
        "STANDARD"
      ],
      "136535": [
        "STANDARD"
      ],
      "136672": [
        "RG0763",
        "ADMIN",
        "STANDARD"
      ],
      "136676": [
        "RG0763",
        "ADMIN",
        "STANDARD"
      ]
    }
  },
"documentType": "ACS_MAP"

我想更新 accessMap 的键并在 accessMap 中每个键的末尾附加一个“:2”,我正在尝试找出如何为此编写查询。

到目前为止我所做的是 select accessMap 的键我做了一个:

SELECT OBJECT_NAMES(联系服务.accessMap) from 联系服务 where documentType = "ACS_MAP"

这给了我:

{
    "": [
      "136400",
      "136401",
      "136535",
      "136672",
      "136676"
    ]
}

我不确定这是否是正确的方法..?

要更改值,您需要使用 UPDATE 语句。 SET/UNSET 的 UPDATE 语句 LHS 需要路径,因此您需要了解要更新的路径。 你有 ARRAY 你可以使用任何 ARRAY 函数 https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/arrayfun.html 或构造新的 ARRAY

UPDATE default AS d
SET d.accessMap.`136672` = ARRAY_APPENED(d.accessMap.`136672`,"xyz")
WHERE ......;

UPDATE default AS d  
SET d.accessMap.[v] = ARRAY_APPEND(d.accessMap.[v], "hello") 
               FOR v IN OBJECT_NAMES(d.accessMap) 
               WHEN v IN ["136672", "136676"] END 
WHERE ....;

post 修复 accessMap 的每个键 ":2"。如果需要特定模式使用 CASE 表达式。

UPDATE default AS d  
SET d.accessMap = OBJECT (v.name|| ":2") : v.val FOR v IN OBJECT_PAIRS(d.accessMap) END 
WHERE ....;