n1ql查询以更新json数据数组中的多个参数 [英] n1ql query to update multiple parameters in array of json data

查看:90
本文介绍了n1ql查询以更新json数据数组中的多个参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下是在ouchbase中的示例文档(用户详细信息)。

Following is the sample document ( userdetails) in couchbase.

{
"friends": [
  {
    "company": "microsoft",
    "firstname": "criss",
    "lastname": "angel"
  },
  {
    "company": "google",
    "firstname": "captain",
    "lastname": "america"
  }
]}

基于公司,我要更改名字和姓氏

based on the "company", i want to change the "firstname" and "lastname"

N1ql查询(以更新单个参数(名字))

update default use keys "userdetails" set a.firstname="xyz" for a in friends when a.company="microsoft" end returning friends

$ b时,更新默认使用键 userdetails为朋友中的a设置a.firstname = xyz
$ b

上面的查询工作正常。

,但是我在编写查询以更新两个参数(名字,姓氏)方面很费力。

Above query works perfectly.
but Im struggling in writting query for updating two parameters ( firstname,lastname)

N1ql查询(以更新两个参数)

update default use keys "userdetails" set a.firstname="abc",a.lastname="xyz" for a in friends when a.company="microsoft" end returning friends


时,ame = abc,a.lastname = xyz表示为in好友

上面的查询仅更新姓氏。

Above query, is updating only "lastname".

输出

{
"friends": [
  {
    "company": "microsoft",
    "firstname": "criss",
    "lastname": "xyz"
  },
  {
    "company": "google",
    "firstname": "captain",
    "lastname": "america"
  }
]}


推荐答案

每个SET项都是独立的,因此您可以执行以下操作:

Each SET term is independent, so you can do the following:

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;

为回答您的评论,以下两种形式可以避免出现双重循环。您可以使用实际数据进行衡量,以查看哪种形式可以提供最佳性能。

To answer your comment, the following two forms avoid the double loop. You can measure with actual data to see which form gives the best performance.

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;

这篇关于n1ql查询以更新json数据数组中的多个参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆