2

以下は、couchbase のサンプル ドキュメント ( userdetails ) です。

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

「会社」をもとに、「名」と「姓」を変更したい

N1ql クエリ (単一パラメーター (firstname) を更新するため)

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

上記のクエリは完全に機能します。
しかし、2つのパラメーター(名、姓)を更新するためのクエリを書くのに苦労しています

N1ql クエリ (2 つのパラメーターを更新する)

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

上記のクエリは、「姓」のみを更新しています。

出力

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

1 に答える 1

2

各 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;

あなたのコメントに答えるために、次の 2 つの形式は二重ループを回避します。実際のデータで測定して、どのフォームが最高のパフォーマンスを発揮するかを確認できます。

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;
于 2016-05-11T04:10:40.077 に答える