n1ql 查询更新 json 数据数组中的多个参数
n1ql query to update multiple parameters in array of json data
以下是 couchbase 中的示例文档 (userdetails)。
{
"friends": [
{
"company": "microsoft",
"firstname": "criss",
"lastname": "angel"
},
{
"company": "google",
"firstname": "captain",
"lastname": "america"
}
]}
基于 "company",我想更改 "firstname" 和 "lastname"
N1ql 查询(更新单个参数(名字))
update default use keys "userdetails" set a.firstname="xyz" for a in friends when a.company="microsoft" end returning friends
以上查询完美运行。
但我正在努力编写查询以更新两个参数(名字,姓氏)
N1ql查询(更新两个参数)
update default use keys "userdetails" set a.firstname="abc",a.lastname="xyz" for a in friends when a.company="microsoft" end returning friends
以上查询,仅更新 "lastname"。
输出
{
"friends": [
{
"company": "microsoft",
"firstname": "criss",
"lastname": "xyz"
},
{
"company": "google",
"firstname": "captain",
"lastname": "america"
}
]}
每个 SET 术语都是独立的,因此您可以执行以下操作:
UPDATE default
USE KEYS "userdetails"
SET a.firstname="abc" FOR a IN friends WHEN a.company="microsoft" END,
a.lastname="xyz" FOR a IN friends WHEN a.company="microsoft" END
RETURNING friends;
为了回答您的意见,以下两种形式避免了双重循环。您可以用实际数据进行衡量,看看哪种形式的性能最好。
UPDATE default
USE KEYS "userdetails"
SET friends[i] = {"firstname":"abc", "lastname":"xyz", "company":"microsoft"} FOR i : a IN friends WHEN a.company="microsoft" END
RETURNING friends;
UPDATE default
USE KEYS "userdetails"
SET friends[i] = OBJECT_PUT(OBJECT_PUT(a, "firstname", "abc"), "lastname", "xyz") FOR i : a IN friends WHEN a.company="microsoft" END
RETURNING friends;
以下是 couchbase 中的示例文档 (userdetails)。
{
"friends": [
{
"company": "microsoft",
"firstname": "criss",
"lastname": "angel"
},
{
"company": "google",
"firstname": "captain",
"lastname": "america"
}
]}
基于 "company",我想更改 "firstname" 和 "lastname"
N1ql 查询(更新单个参数(名字))
update default use keys "userdetails" set a.firstname="xyz" for a in friends when a.company="microsoft" end returning friends
以上查询完美运行。
但我正在努力编写查询以更新两个参数(名字,姓氏)
N1ql查询(更新两个参数)
update default use keys "userdetails" set a.firstname="abc",a.lastname="xyz" for a in friends when a.company="microsoft" end returning friends
以上查询,仅更新 "lastname"。
输出
{
"friends": [
{
"company": "microsoft",
"firstname": "criss",
"lastname": "xyz"
},
{
"company": "google",
"firstname": "captain",
"lastname": "america"
}
]}
每个 SET 术语都是独立的,因此您可以执行以下操作:
UPDATE default
USE KEYS "userdetails"
SET a.firstname="abc" FOR a IN friends WHEN a.company="microsoft" END,
a.lastname="xyz" FOR a IN friends WHEN a.company="microsoft" END
RETURNING friends;
为了回答您的意见,以下两种形式避免了双重循环。您可以用实际数据进行衡量,看看哪种形式的性能最好。
UPDATE default
USE KEYS "userdetails"
SET friends[i] = {"firstname":"abc", "lastname":"xyz", "company":"microsoft"} FOR i : a IN friends WHEN a.company="microsoft" END
RETURNING friends;
UPDATE default
USE KEYS "userdetails"
SET friends[i] = OBJECT_PUT(OBJECT_PUT(a, "firstname", "abc"), "lastname", "xyz") FOR i : a IN friends WHEN a.company="microsoft" END
RETURNING friends;