假设我在Cosmos文档中有一个父子孙子等关系,由以下JSON表示:
"id": "someUniqueString",
"peepsNkids": [
"Jane": [
"Joe": [],
"Jocelyn": [
"Jerry": [],
"Jan": [
"Tom": [],
"Dick": [],
"Harry": []
],
"Jim": []
],
"Mary": [
"Moe": [],
"Larry": [],
"Dorothy": [
"Eadie": [],
"Phil": [],
"Lucille": [
"Desi Jr": []
]
]
]
]
如何使用this post titled "Query DocumentDB"的“子文档”部分的语法干净地(在Storage Explorer和C#中)查询一个子树,该子树将解析为:
SELECT * FROM peepsNkids.Jane.Jocelyn.Jan
...期望返回以下内容?
[
"Tom": [],
"Dick": [],
"Harry": []
]
我认为我不必担心这里的原始ID。最糟糕的情况是,我取回了多个具有Jane.Jocelyn.Jan
的记录,并且由于在我的“真实”设置中,“名称”都是唯一的ID,因此取回多行将指示严重的原理图问题。
我显然可以使用string name
和List<PersonAndKids> peepsNkids
创建一个潜在的周期性对象模型,然后获取ID为"someUniqueString"
和的 full 条目然后遍历带有许多peepsNkids.TryGetValue("Jane", out firstParent)
种类的对象的对象,但是我正在寻找一种在Cosmos中而不是在服务的内存中实现该目的的方法。
答案 0 :(得分:0)
您的错误似乎是相信您必须像在问题中提到的那样查询某种“嵌套表” ...
SELECT * FROM c.peepsNkids.Jane.Jocelyn.Jan
现在您是对的,这正是 在the link you provided中作为嵌套查询演示的内容,其中包括以下查询:
SELECT *
FROM Families.address.state
我看不到在Storage Explorer中执行该方法的方法。找出如何使用此构造或是否有可能会很有趣。
但是,可以进行等效查询来选择一种等同于表的“复合字段”。试试这个:
SELECT peepsNkids.Jane.Jocelyn.Jan FROM c
或者更好的是,要通过id将查询限制为特定文档,请尝试以下操作:
SELECT peepsNkids.Jane.Jocelyn.Jan FROM c WHERE c.id = 'someUniqueString'