【问题标题】:Querying nested subtrees in Cosmos DB在 Cosmos DB 中查询嵌套子树
【发布时间】:2019-04-21 23:52:19
【问题描述】:

假设我在 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" 的“子文档”部分的语法清晰地查询(在存储资源管理器和 C# 中)子树,该子树将解析为:

SELECT * FROM peepsNkids.Jane.Jocelyn.Jan

...期望返回以下内容?

[
    "Tom": [],
    "Dick": [],
    "Harry": []
]

我认为我不需要担心这里的原始 id。最坏的情况是我返回了多个具有Jane.Jocelyn.Jan 的记录,并且由于在我的“真实”设置中,“名称”都是唯一的 ID,因此返回多行将表明存在严重的示意图问题。

我显然可以使用string nameList<PersonAndKids> peepsNkids 创建一个潜在的循环对象模型,然后取回id "someUniqueString"完整 条目并然后 遍历对象有很多 peepsNkids.TryGetValue("Jane", out firstParent) 之类的东西,但我正在寻找一种在 Cosmos 中而不是在我的服务内存中执行此操作的方法。

【问题讨论】:

  • 如果您发现了问题,请将其作为正确答案发布,而不是作为对您问题的编辑。这样,就可以对这个问题和答案进行相应的投票。
  • @DavidMakogon 这就是计划。出于某种原因,我认为我必须等待两天才能回答我自己的问题;感谢您的更新。
  • @DavidMakogon Worth 指出我仍然无法使用at the link I provided 所示格式的查询,这仍然是这个问题的未回答部分。

标签: c# azure-cosmosdb document-database


【解决方案1】:

嵌套查询不起作用

您的错误似乎是认为您必须查询一种“嵌套表”,就像您在问题中提到的那样......

SELECT * FROM c.peepsNkids.Jane.Jocelyn.Jan

现在你是对的,这正是the link you provided 中作为嵌套查询演示的内容,其中包括以下查询:

SELECT * 
FROM Families.address.state

我看不到在存储资源管理器中执行该操作的方法。了解如何使用这种结构或者是否可行会很有趣。

复合字段等效

但是,可以执行等效查询来选择一种等同于表的“复合字段”。试试这个:

SELECT peepsNkids.Jane.Jocelyn.Jan FROM c

或者,更好的是,通过 id 将该查询限制到特定文档,试试这个:

SELECT peepsNkids.Jane.Jocelyn.Jan FROM c WHERE c.id = 'someUniqueString'

【讨论】:

  • 在 Azure 门户中的 Azure 存储资源管理器或数据资源管理器中进行查询具有挑战性,因为两者都强制查询以“SELECT * FROM c”开头。
猜你喜欢
  • 2021-12-14
  • 2019-01-21
  • 1970-01-01
  • 2019-01-25
  • 2019-11-20
  • 2021-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多