如何在Azure Cosmos DB中查询嵌套数组内的指定文件名?
Azure Cosmos DB 查询嵌套数组中指定文件名的解决方法
针对你提供的嵌套JSON结构,在Cosmos DB数据资源管理器中可以通过多层JOIN来展开嵌套数组,从而精准查询指定文件名。以下是具体实现方案:
1. 查询包含指定文件名的完整文档
如果需要找出所有包含目标文件名的文档,使用以下SQL:
SELECT * FROM c JOIN a1 IN c.array1 JOIN a2 IN a1.array2 WHERE a2.fileName = "filename1.pdf"
- 这里的
JOIN a1 IN c.array1展开外层的array1数组,JOIN a2 IN a1.array2进一步展开每个array1元素下的array2数组,最终可以直接访问a2.fileName进行条件过滤。
2. 仅返回匹配的文件名及关联实体ID
如果只需要提取匹配的文件名和对应的entityId,可以简化查询结果:
SELECT c.entityId, a2.fileName FROM c JOIN a1 IN c.array1 JOIN a2 IN a1.array2 WHERE a2.fileName = "filename1.pdf"
3. 模糊查询文件名
如果需要匹配文件名中包含特定字符串(比如所有PDF文件),可以使用CONTAINS函数:
SELECT c.entityId, a2.fileName FROM c JOIN a1 IN c.array1 JOIN a2 IN a1.array2 WHERE CONTAINS(a2.fileName, ".pdf")
注意事项
Cosmos DB中展开嵌套数组使用的是JOIN关键字,而非部分数据库中的FLATTEN,这可能是你之前尝试失败的原因。只要按照数组嵌套层级依次使用JOIN,就能逐层访问到深层的fileName字段。
内容的提问来源于stack exchange,提问作者Julito Avellaneda
相关产品推荐
相关产品推荐

