Alex Rodnies
Alex Rodnies

Reputation: 5

Update specific object in the array of object in couchbase 4.1

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

Answers (2)

swarna mohn
swarna mohn

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

geraldss
geraldss

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

Related Questions