I have below kind of Json document stored in CB collection
{
"cti": "B1",
"v": 3,
"es": {
"lb": false,
"mu": true,
"t1": true
},
"attribs": [
{
"desc": "Heading",
"id": "head",
"name": "HEAD",
"prop": {
"name": "t1",
"type": "str"
},
"vals": [
{
"em": "M",
"isM": true
}
]
},
{
"desc": "Body",
"id": "body",
"name": "Body",
"prop": {
"type": "str"
}
}
]
}
I have written below query to update KEY FROM “attribs.prop.name” TO “attrib.prop.names” and VALUE from “t1” to [“t1”], as i am doing schema change and i need to do existing data correction, to make from "name" type string to "names" type array_of_string
UPDATE `your_bucket`
SET attribs = ARRAY
CASE
WHEN v.prop.name IS NOT MISSING THEN
OBJECT_PUT(v, 'prop', OBJECT_PUT(OBJECT_REMOVE(v.prop, 'name'), 'names', [v.prop.name]))
ELSE v
END
FOR v IN attribs END
WHERE ANY v IN attribs SATISFIES v.prop.name IS NOT MISSING END;
I ran your original query you provided in your question on an example document that matches the original document example you provided in the question, and it did as you are trying to do. It converted the attribute to names
and the value to an array.