如何使用 ArangoDB 迭代嵌套 JSON?

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 的示例。例如,如果我需要 SubAID 的值,其中 QID2,我应该如何编写这样的查询?

在主要层面上,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 的对象。

如果所有数据都是如此,如下所示的查询应该会找到 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]