如何在Azure Cosmos DB中查询嵌套JSON的指定数组数据
Azure Cosmos DB 过滤嵌套数组子项解决方案
你之前用ARRAY_CONTAINS(c.items, {"arr_id": 1},true)只能筛选出包含目标子项的完整文档,但不会对items数组本身做过滤——这是因为这个函数的作用只是判断数组里有没有匹配元素,用来过滤文档,而非修改数组内容。
要实现保留arr_id=1的子项同时返回原文档结构,需要结合JOIN和ARRAY()函数来构建过滤后的数组:
SELECT c.id, ARRAY(SELECT * FROM item IN c.items WHERE item.arr_id = 1) AS items FROM c WHERE ARRAY_CONTAINS(c.items, {"arr_id": 1}, true)
说明:
JOIN item IN c.items遍历items数组里的每一个子项WHERE item.arr_id = 1筛选出符合条件的子项ARRAY(...) AS items把筛选后的子项重新组装成数组,替换原items字段- 外层的
WHERE ARRAY_CONTAINS(...)可以先过滤掉完全没有匹配子项的文档,提升查询效率
执行这个查询后,返回的结果就会和你预期的一致:只保留items中arr_id=1的子项,同时保留原文档的id字段。
内容的提问来源于stack exchange,提问作者noobCoder50
相关产品推荐
相关产品推荐

