代码之家  ›  专栏  ›  技术社区  ›  ruffin

查询cosmos数据库中的嵌套子树

  •  0
  • ruffin  · 技术社区  · 6 年前

    假设我在cosmos文档中有一个父子孙etc关系,用以下json表示:

    "id": "someUniqueString",
    "peepsNkids": [
        "Jane": [
            "Joe": [],
            "Jocelyn": [
                "Jerry": [],
                "Jan": [
                    "Tom": [],
                    "Dick": [],
                    "Harry": []
                ],
                "Jim": []
            ],
        "Mary": [
            "Moe": [],
            "Larry": [],
            "Dorothy": [
                "Eadie": [],
                "Phil": [],
                "Lucille": [
                    "Desi Jr": []
                ]
            ]
        ]
    ]
    

    如何(在存储资源管理器和c)使用 this post titled "Query DocumentDB" ,将决定:

    SELECT * FROM peepsNkids.Jane.Jocelyn.Jan

    …希望能得到以下的回报?

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

    我想我不必担心这里的原始身份证。最糟糕的情况是我得到了多个记录 Jane.Jocelyn.Jan ,并且由于在我的“real”设置中,“names”都是唯一的id,因此返回多行将指示严重的原理图问题。

    很明显,我可以用 string name List<PersonAndKids> peepsNkids ,然后返回 满的 输入ID "someUniqueString" 然后 用大量的 peepsNkids.TryGetValue("Jane", out firstParent) 有很多种,但我在寻找一种在宇宙中而不是在我的服务记忆中实现的方法。

    1 回复  |  直到 6 年前
        1
  •  0
  •   ruffin    6 年前

    嵌套查询不起作用

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

    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'