代码之家  ›  专栏  ›  技术社区  ›  Thomas Levesque

查询SDB文档中字典中的项

  •  1
  • Thomas Levesque  · 技术社区  · 6 年前

    我的宇宙数据库里有这样的文件:

    {
        "id": "12345",
        "filename": "foo.txt",
        "versions": {
            "1": {
                "storageAccount": "blob123",
                "size": 33
            },
            "2": {
                "storageAccount": "blob123",
                "size": 42
            }
        }
    }
    

    (这是一个简化的示例)

    我需要查询 "storageAccount" 属性,以检查给定存储帐户上是否存储了文件。但我找不到一种表达“每个版本”的方式。

    我试过了,当然不行

    select top 1 *
    from c
    join v in c.versions
    where v.storageAccount = 'blob123'
    

    显然 JOIN 只适用于数组,不适用于字典。有没有办法查询字典里的条目?

    作为一种解决方法,我可以使用自定义项,但是性能和成本都很糟糕(当没有匹配的文档时,只有2000个文档需要1200个RU…)

    编辑:更新以更紧密地反映实际用例

    1 回复  |  直到 6 年前
        1
  •  1
  •   Chris Anderson    6 年前

    我建议将模式更改为:

    {
        "id": "12345",
        "filename": "foo.txt",
        "versions": [
            {
                "id": "1"
                "storageAccount": "blob123",
                "size": 33
            },
            {
                "id": "2"
                "storageAccount": "blob123",
                "size": 42
            }
        ]
    }
    

    此外,您可以评估一个用户定义的函数,该函数将为您返回对象的键,但这将增加您的RU成本,尽管可能比存储过程要少。