{ "someId": "456", "someDetails": { "ABC": { "submissionId": "somebatch1", "status": "OPEN" }, "DEF": { "submissionId": "somebatch1", "status": "OPEN" } }, "nsid": "detail" }
How can I get a query and index which can return something like -
CREATE INDEX ix1 ON default (ALL OBJECT_NAMES(someDetails)) WHERE nsid = "detail";
SELECT dname, COUNT(1) AS cnt
FROM default AS d
UNNEST OBJECT_NAMES(d.someDetails) AS dname
WHERE d.nsid = "detail"
GROUP BY dname;
@vsr1 Our new requirement is now to get the count by status “OPEN” and “COMPLETED”. To achieve that I have to also get OBJECT_VALUE? Can you please help with the same and also the index for it.
SELECT dp.name,
SUM( CASE WHEN dp.val.status = "OPEN" TEHN 1 ELSE 0 END) AS open,
SUM( CASE WHEN dp.val.status = "COMPLETED" TEHN 1 ELSE 0 END) AS completed,
FROM default AS d
UNNEST OBJECT_PAIRS(d.someDetails) AS dp
WHERE d.nsid = "detail"
GROUP BY dp.name ;
@vsr1 when I run this query in query manager, it works fine but when I use the same query in code, it doesn’t work. I copied the query multiple times from code and ran it in query manager and it works fine but when the code is executed it retuns 0 rows.
private static final String COUNT_QUERY = “SELECT dp.name, dp.val.status, COUNT(1) AS cnt” +
" FROM $bucketName AS d " +
" UNNEST OBJECT_PAIRS(d.someDetails) AS dp "+
" WHERE d.nsid = $nsid " +
" GROUP BY dp.name, dp.val.status ";