我如何 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 ....;
我有一组文档类型:
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 ....;