Cosmos DB NoSQL:基于familyID用子查询实现嵌套文档SELECT查询
Azure Cosmos DB NoSQL 查询:嵌套关联的Dog/Cat到Family文档
完整查询语句
针对指定familyId='100',实现嵌套结构的查询如下:
SELECT f, -- 嵌套同家庭的Dog文档为canines数组 (SELECT VALUE d FROM d IN Families WHERE d.type = 'dog' AND d.familyId = f.familyId) AS canines, -- 嵌套同家庭的Cat文档为felines数组 (SELECT VALUE c FROM c IN Families WHERE c.type = 'cat' AND c.familyId = f.familyId) AS felines FROM Families f WHERE f.type = 'family' AND f.familyId = '100'
核心逻辑说明
- 主查询定位Family文档:先筛选
type='family'的目标家庭文档,避免返回无关的扁平宠物数据。 - 子查询实现嵌套聚合:
SELECT VALUE的作用:直接返回宠物文档的原始内容,不会生成带外层键的包装对象,让嵌套数组结构更纯净。- 通过
d.familyId = f.familyId关联主查询的Family文档,确保只聚合同家庭的宠物数据。
- 灵活保留原有属性:如果需要单独指定返回的Family字段(而非全部属性),可以替换
f为具体字段,比如:SELECT f.id, f.name, f.address, (SELECT VALUE d FROM d IN Families WHERE d.type = 'dog' AND d.familyId = f.familyId) AS canines, (SELECT VALUE c FROM c IN Families WHERE c.type = 'cat' AND c.familyId = f.familyId) AS felines FROM Families f WHERE f.type = 'family' AND f.familyId = '100'
执行效果
返回结果为包含目标Family的数组,每个Family文档内嵌套了同家庭的所有canines(Dog集合)和felines(Cat集合),完全替代了原有的扁平列表结构。
内容的提问来源于stack exchange,提问作者Kevin K
相关产品推荐
相关产品推荐

