如何检索嵌套属性以及Azure DocumentDB中的id

时间:2017-07-25 20:31:04

标签: azure azure-cosmosdb

我有一些文档存储在documentdb中,遵循这个基本设计:

{
  "id": "abc123",
  "hiddenField": "XXXXXX",
  "attributes": {
    "x": "7",
    "y": "8",
    "z": "9"
  }
}

在此示例中,属性下有三个属性,但实际上这不是常量。我想在没有隐藏字段的情况下检索它,并将任意数量的属性与id一起投影到文档的根目录中:

{
  "id": "abc123",
  "x": "7",
  "y": "8",
  "z": "9"
}

通过此查询,我可以将x,y和z输入根目录:

SELECT VALUE c.attributes FROM c

这会产生这个结果:

{
  "x": "7",
  "y": "8",
  "z": "9"
}

...但此查询无效:

SELECT c.id, VALUE c.attributes FROM c

这是可以理解的,因为文档会说您可以列出属性或使用VALUE运算符。很公平。

有没有办法使用JOIN运算符或其他一些投影来结束所需的结果集?

1 个答案:

答案 0 :(得分:2)

根据您的方案,我假设您可以参考以下查询:

SELECT
    c.id,
    c.attributes.x as x,
    c.attributes.y as y,
    c.attributes.z as z
from yourinput c

示例数据:

[{
  "id": "abc123",
  "hiddenField": "XXXXXX",
  "attributes": {
    "x": "7",
    "y": "8",
    "z": "9"
  }
},{
  "id": "abc456",
  "hiddenField": "XXXXXX",
  "attributes": {
    "x": "1",
    "y": "2",
    "z": "3"
  }
}]

<强>结果:

enter image description here

<强>更新

由于文档中attributes属性的数量是任意的,我假设您可以利用user defined functions (UDFs)实现此目的,如下所示:

<强> udf.fun

function main(attributes, id) {
    attributes["id"]=id;
    //add your other properties here
    return attributes;
}

<强>查询:

SELECT
    UDF.fun(attributes,id)
FROM
    [YourInputAlias]