2017-07-25 96 views
1

我已经存储在遵循这个基本的设计documentdb一些文件的ID一起检索嵌套的属性:如何与Azure的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运算符或其他投影来结束所需的结果集?

+0

我不知道把我的头,如果这是可能使用SQL文档的API的顶部,但它会很容易实现一个存储过程,这是否转化为你 –

+0

谢谢,这是个好主意。我们目前正在JavaScript Azure函数中进行解析,因此可能不会太难将其移回数据库层以提高效率。 – Graham

回答

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

UPDATE:

由于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] 
+0

谢谢,但属性的数量是任意的。我编辑了这个问题来反映这一点。 – Graham

+0

我根据你的情况更新了我的答案,你可以参考它。 –