Reputation: 5
I have following doc with doc key cart::16
{
"_type": "NSCart",
"_metadata": {
"created_at": 1473075845614,
"updated_at": null
},
"_id": "f28bc609-6aba-47e5-8e83-5bee2397566f",
"userId": "B1HvmsLj57c9235c",
"items" : [{
"itemId": "N1d55j8m4xr",
"seller": "ByD9T4Ks57cbbd8e",
"license": null,
"basePrice": 0
},{
"itemId": "L9nd6Dswl4v",
"seller": "ByD9T4Ks57cbbd8e",
"license": E122,
"basePrice": 500,
"eCharge": 10,
"total": 510
}]
}
now i want to update a doc where item id is N1d55j8m4xr like this
{
"itemId": "N1d55j8m4xr",
"seller": "ByD9T4Ks57cbbd8e",
"license": null,
"basePrice": 590,
"eCharge": 18,
"total": 608
}
There is method array_replace in n1ql but didn't get desired output.
Upvotes: 0
Views: 1267
Reputation: 45
update `buc_name` set items =
CASE
WHEN "N1d55j8m4xr" IN items [*].itemId
THEN (ARRAY CASE WHEN itm.itemId = "N1d55j8m4xr"
THEN {
"itemId": "N1d55j8m4xr",
"seller": "ByD9T4Ks57cbbd8e",
"license": null,
"basePrice": 590,
"eCharge": 18,
"total": 608
}
ELSE itm
END
FOR itm IN items END) end where "N1d55j8m4xr" IN items [*].itemId
Upvotes: 0
Reputation: 2445
Use the following syntax from the N1QL documentation.
UPDATE mybucket SET x.field = newvalue FOR x IN myarray WHEN x.id = myid END;
Upvotes: 4