2015-11-29 76 views
0

我有下一个结构的JSON: [[{"QID":1,"AID":1},{"SubAID":[]}],[{"QID":2,"AID":1},{"SubAID":[2,4]}],[{"QID":3,"AID":1},{"SubAID":[]}],{"MaxArea":"90","MinArea":"16"}]如何迭代嵌套的JSON与ArangoDB?

这对ArangoDB好吗?我尝试用http-api(我没有用于我的语言的驱动程序 - D)推送它,但是我得到了error 500,也许我错了,也许这个JSON对于ArangoDB不正确。

另外我想获得迭代这种JSON与AQL的任何例子。例如,如果我需要SubAID的值QID2,我该如何编写这样的查询?

回答

3

在主要级别上,ArangoDB中的文档是JSON对象。您在JSON数组中显示的JSON,因此它不会像文档一样被接受。

可以执行的操作是包裹上述JSON中的对象的属性,例如data

{"data":[[{"QID":1,"AID":1},{"SubAID":[]}],[{"QID":2,"AID":1},{"SubAID":[2,4]}],[{"QID":3,"AID":1},{"SubAID":[]}],{"MaxArea":"90","MinArea":"16"}]}

关于查询数据:它看起来像数据是一个包含阵列和对象阵列。阵列内有一个与在阵列位置0属性QIDAID的对象,并且在阵列位置1

如果对于所有的数据是真实的含有SubAid一个对象,像如下应该找到的文件的一个查询,一个QID2

/* 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]