2016-05-11 9 views
2

次にcouchbaseのサンプルドキュメント(userdetails)を示します。 "会社" に基づいて jsonデータの配列内の複数のパラメータを更新するn1qlクエリ

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

は、私は

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

(単一のパラメータ(FIRSTNAME)を更新する)、 "ファーストネーム" と "姓"

N1qlクエリを変更したいです上記のクエリは完全に機能します。
しかしImは2つのパラメータを更新するため足すクエリで苦労(FIRSTNAME、姓)

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 

問い合わせの上、 "姓" のみ更新しています。

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つの形式は、二重ループを避ける:

出力

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

答えて

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; 
+0

これは効率的な更新方法ですか? パフォーマンスには影響しません。 ? – ravindar

+0

クエリがエラーをスローしています。 @geraldss '[ { "コード":3000、 "MSG": "構文エラー - で:"、 "query_from_user": "UPDATEデフォルトの\ R \ nUSE KEYS \" userdetails \" \ R \ NSET友人[i] = {\ "firstname \":\ "abc \"、\ "lastname \":\ "xyz \"、\ "company \":\ "microsoft \"} \ "\" \ "\" \ "\" \ "\" \ "\" \ "友人に返信してください。"、 "query_with_limit": "UPDATEのデフォルト\ \ "マイクロソフト\":\ "マイクロソフト\"} \ n "" \ "マイクロソフト\"エンド\友人nRETURNING; " } ] ' – ravindar

+0

あなたは4.5ベータ版を使用していますか?あなたはそれを使う必要があるかもしれません。 – geraldss

関連する問題