如何使用ArangoDB迭代嵌套JSON?
我有下一个结构的JSON:如何使用ArangoDB迭代嵌套JSON?,json,arangodb,aql,Json,Arangodb,Aql,我有下一个结构的JSON: 这对ArangoDB合适吗?我试图用http api推送它(我的语言-D没有驱动程序),但我得到了错误500,可能我错了,可能这个JSON对ArangoDB不正确 此外,我还想获得任何使用AQL迭代此类JSON的示例。例如,如果我需要SubAID的值,其中QID是2,我应该如何编写这样的查询?在主级别,ArangoDB中的文档是JSON对象。上面在JSON数组中显示的JSON,因此不会作为文档接受 您可以做的是将上面的JSON包装到一个对象属性中,例如data: {
这对ArangoDB合适吗?我试图用http api推送它(我的语言-D没有驱动程序),但我得到了错误500
,可能我错了,可能这个JSON对ArangoDB不正确
此外,我还想获得任何使用AQL迭代此类JSON的示例。例如,如果我需要SubAID
的值,其中QID
是2
,我应该如何编写这样的查询?在主级别,ArangoDB中的文档是JSON对象。上面在JSON数组中显示的JSON,因此不会作为文档接受
您可以做的是将上面的JSON包装到一个对象属性中,例如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]
在主级别上,ArangoDB中的文档是JSON对象。上面在JSON数组中显示的JSON,因此不会作为文档接受
您可以做的是将上面的JSON包装到一个对象属性中,例如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]