Remove array object at 4th level in couchbase 4.0.0

Hi,
I am having document like below, need to do remove

Need to remove { “id”: “1234”,“responseQual3Url”: “aa” } from document,

I have written like this :
UPDATE default AS assessment USE KEYS "test"
SET
t.questions = ARRAY_REMOVE(t.questions,EVERY q WITHIN assessment.versions SATISFIES q.id = “1234” END)
FOR t WITHIN assessment.versions when t.id = “TAB-9e56258e-c468-4ca7-aac3-cd74d5ed1952” END
;

Its not working…

My Documents looks like :

===========================
{
“assessmentName”: “sample_assessment”,
“objectType”: “assessment”,
“versions”: [
{
“createdBy”: “admin”,
“createdOn”: “24-04-2017 15:09:59+0530”,
“generalDescription”: “Just sample assesment”,
“lastUpdated”: “26-04-2017 19:59:21+0530”,
“lastUpdatedBy”: “admin”,
“released”: false,
“tabs”: [
{
“generalDescription”: “tab 1”,
“id”: “TAB-9e56258e-c468-4ca7-aac3-cd74d5ed1952”,
“index”: “0”,
“name”: “Tab1”,
“questions”: [
{
“id”: “QSTN-76dc0adc-259b-415f-b593-120c3a5f3f8b”,
“index”: “0”,
“questionTitle”: “Sample Question”,
“responseQual1Desc”: “bad”,
“responseQual1Url”: null,
“responseQual2Desc”: “poor”,
“responseQual2Url”: null,
“responseQual3Desc”: “avg”,
“responseQual3Url”: null,
“responseQual4Desc”: “good”,
“responseQual4Url”: null,
“responseQual5Desc”: “exc”,
“responseQual5Url”: null,
“responseQualNADesc”: “N/A”
},
{
“id”: “QSTN-93655ae4-646d-471b-b6c9-c7330ae6f651”,
“index”: “1”,
“questionTitle”: “sample2”,
“responseQual1Desc”: “1”,
“responseQual1Url”: null,
“responseQual2Desc”: “2”,
“responseQual2Url”: null,
“responseQual3Desc”: “3”,
“responseQual3Url”: null,
“responseQual4Desc”: “4”,
“responseQual4Url”: null,
“responseQual5Desc”: “5”,
“responseQual5Url”: null,
“responseQualNADesc”: “na”
},
{
“id”: “1234”,
“responseQual3Url”: “aa”
}
]
},
{
“generalDescription”: “Tab 2”,
“id”: “TAB-1a997a9e-5cc5-40f9-8b98-dcbf677af69e”,
“index”: “1”,
“name”: “tab2”,
“questions”: []
},
{
“generalDescription”: “tab 3”,
“id”: “TAB-90e5c17d-d315-4e38-b7ac-8e93736a2b71”,
“index”: “2”,
“name”: “tab3”,
“questions”: [
{
“responseQual3Url”: “aa”
}
]
}
],
“version”: 1
}
]
}

======================

Need some help on this ASAP.

Thanks,

You need to use update query with unset clause.

@nihar.rathod I have tried using unset, its not working for me on object which present in array, but we can unset a field not complete object in array

quickly tried on my db and its working.
my doc is some thing like this
{
id:"key1"
field1: “asdf”,
field2: “temp”,
field3: [
{
subfield1:“asdf”,
subfield2:“asdf”,
},
{
subfield1:“asdf”,
subfield2:“asdf”,
}
]
}

update query:
“update bucketname use keys “key1” unset field3;”

what is your update query?

Not field3 entire array, but 1st array object**{subfield1:“asdf”,subfield2:“asdf”,}** in field3 needs to be removed and one more thing is need to check for object at 3rd or 4th level,

In my document, In versions array -> tabs array -> questions array’s object has to be removed at that level

Try this.

UPDATE default AS assessment USE KEYS "test"
SET t.questions = ARRAY q FOR q IN t.questions WHEN q.id != "1234" END
FOR t WITHIN assessment.versions when t.id = "TAB-9e56258e-c468-4ca7-aac3-cd74d5ed1952" END ;

@vsr1 sorry, not working

It works on 4.5.0, 4.0.0

 insert into default values("k01",{ "assessmentName": "sample_assessment", "objectType": "assessment", "versions": [ { "createdBy": "admin", "createdOn": "24-04-2017 15:09:59+0530", "generalDescription": "Just sample assesment", "lastUpdated": "26-04-2017 19:59:21+0530", "lastUpdatedBy": "admin", "released": false, "tabs": [ { "generalDescription": "tab 1", "id": "TAB-9e56258e-c468-4ca7-aac3-cd74d5ed1952", "index": "0", "name": "Tab1", "questions": [ { "id": "QSTN-76dc0adc-259b-415f-b593-120c3a5f3f8b", "index": "0", "questionTitle": "Sample Question", "responseQual1Desc": "bad", "responseQual1Url": null, "responseQual2Desc": "poor", "responseQual2Url": null, "responseQual3Desc": "avg", "responseQual3Url": null, "responseQual4Desc": "good", "responseQual4Url": null, "responseQual5Desc": "exc", "responseQual5Url": null, "responseQualNADesc": "N/A" }, { "id": "QSTN-93655ae4-646d-471b-b6c9-c7330ae6f651", "index": "1", "questionTitle": "sample2", "responseQual1Desc": "1", "responseQual1Url": null, "responseQual2Desc": "2", "responseQual2Url": null, "responseQual3Desc": "3", "responseQual3Url": null, "responseQual4Desc": "4", "responseQual4Url": null, "responseQual5Desc": "5", "responseQual5Url": null, "responseQualNADesc": "na" }, { "id": "1234", "responseQual3Url": "aa" } ] }, { "generalDescription": "Tab 2", "id": "TAB-1a997a9e-5cc5-40f9-8b98-dcbf677af69e", "index": "1", "name": "tab2", "questions": [] }, { "generalDescription": "tab 3", "id": "TAB-90e5c17d-d315-4e38-b7ac-8e93736a2b71", "index": "2", "name": "tab3", "questions": [ { "responseQual3Url": "aa" } ] } ], "version": 1 } ] });
SELECT * FROM default USE KEYS ["k01"];
UPDATE default AS assessment USE KEYS "k01" SET t.questions = ARRAY q FOR q IN t.questions WHEN q.id != "1234" END FOR t WITHIN assessment.versions when t.id = "TAB-9e56258e-c468-4ca7-aac3-cd74d5ed1952" END ;
 SELECT * FROM default USE KEYS ["k01"];

hey its working, @vsr1, thank you very much…
Thanks very much for your quick response, thanks a lot…

@vsr1, can i remove the same object without using tab id, but only with question id as input param, can you please suggest on that

If you omit when t.id = “TAB-9e56258e-c468-4ca7-aac3-cd74d5ed1952”, it removes from all assessment.versions[*].questions . If that is requirement you can omit it.

GREAT !!! @vsr1, thank you very much…, its working