如何使用ArangoDB迭代嵌套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: {

我有下一个结构的JSON:

这对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]