I'm trying to write a JavaScript cts query to query only unique values from a key from a JSON document based on another key. i.e, similar to a query like: select distinct(name) from data-hub-staging where source='source1'
{
"source": "source1",
"name": "John",
"DOB": "1-01-1990",
"load_date": "2021-10-23 10:23:55"
},
{
"source": "source1",
"name": "John",
"DOB": "1-01-1990",
"load_date": "2021-10-24 10:23:55"
},
{
"source": "source1",
"name": "Mark",
"DOB": "1-01-1990",
"load_date": "2021-10-24 10:23:55"
}
I have been trying the below query, but it returns all the fields. I wanted only the unique name field.
const query = cts.jsonPropertyValueQuery(
"source",
"source1");
[...new Set (cts.search(query)
.toArray()
.map(doc => doc.root.name).sort())]
Current result: [John,John,Mark]
Expected result: [John,Mark]
The name
values are not being de-duplicated by the Set because they are text()
nodes. You need to get the .valueOf()
those text nodes and then the strings will be de-duplicated.
const query = cts.jsonPropertyValueQuery(
"source",
"source1");
[...new Set (cts.search(query)
.toArray()
.map(doc => doc.root.name.valueOf()).sort())]