let’s say the id of doc1/doc1/doc3 is doc1,doc2,doc3
SELECT a.k,ARRAY_AGG(a.item_d) AS `data_list`
FROM (
SELECT item_d,1 AS k FROM `data` d UNNEST d.`data` item_d USE KEYS["doc1","doc2","doc3"]
) AS a
GROUP BY a.k
you can rewrite the condition to filter the data that you want to gather to.
Sorry for being a complete noob here and not specifying my problem properly. All the documents will have the same ‘id1’ and ‘id2’ and this is what I want to match. Can I replace USE KEYS with WHERE id1=“u12” AND id2=“v4”, since I don’t know the doc_id’s? I’m trying to run the query now but it seems to take a long time.
SELECT a.k,ARRAY_AGG(a.item_d) AS `data_list`
FROM (
SELECT item_d,1 AS k FROM `data` d UNNEST d.`data` item_d WHERE d.id1 == "u12" AND d.id2 == "v4"
) AS a
GROUP BY a.k
SELECT d.id1, d.id2, ARRAY_FLATTEN(ARRAY_AGG(d.data),2) AS data FROM `data` d GROUP BY d.id1, d.id2;
OR
SELECT a.id1, a.id2, ARRAY_AGG(a.item_d) AS data
FROM ( SELECT item_d, d.id1, d.id2 FROM `data` d UNNEST d.`data` item_d ) AS a
GROUP BY a.id1, a.id2;