[英]How to iterate nested JSON with ArangoDB?
我的JSON具有以下结构: [[{"QID":1,"AID":1},{"SubAID":[]}],[{"QID":2,"AID":1},{"SubAID":[2,4]}],[{"QID":3,"AID":1},{"SubAID":[]}],{"MaxArea":"90","MinArea":"16"}]
ArangoDB可以吗? 我尝试将其与http-api一起使用(我没有针对我的语言的驱动程序-D),但出现error 500
,也许我错了,也许此JSON对ArangoDB不正确。
我也想获得使用AQL迭代此类JSON的任何示例。 例如,如果我需要QID
为2
的SubAID
值,我应该如何编写这样的查询?
在主要级别上,ArangoDB中的文档是JSON对象。 您上面在JSON数组中显示的JSON,因此不会作为文档原样接受。
您可以做的是将上述JSON包装在object属性中,例如data
:
{"data":[[{"QID":1,"AID":1},{"SubAID":[]}],[{"QID":2,"AID":1},{"SubAID":[2,4]}],[{"QID":3,"AID":1},{"SubAID":[]}],{"MaxArea":"90","MinArea":"16"}]}
关于查询数据:看起来数据是一个包含数组和对象的数组。 在数组内部,在数组位置0处有一个具有QID
和AID
属性的对象,在数组位置1处有一个包含SubAid
的对象。
如果对所有数据都是如此,则如下查询应找到QID
值为2
的文档:
/* iterate over all documents in collection */
FOR doc IN collection
LET s = (
/* iterate over embedded attribute "data */
FOR sub IN doc.data
/* look at QID at array position 0 */
FILTER sub[0].QID == 2
/* first match is sufficient */
LIMIT 1
/* return SubAID value from array position 1 */
RETURN sub[1].SubAID
)
/* only return documents with a match */
FILTER LENGTH(s) > 0
/* return first result from subquery (subquery result is always an array) */
RETURN s[0]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.