0

我有具有下一个结构的 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 的任何示例。例如,如果我需要SubAIDwhere QIDis的值2,我应该如何编写这样的查询?

4

1 回答 1

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"}]}

关于查询数据:看起来数据是一个包含数组和对象的数组。在数组内部有一个具有属性QIDAID位于数组位置 0 的对象,以及一个包含SubAid位于数组位置 1 的对象。

如果所有数据都如此,则如下查询应该找到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] 
于 2015-11-30T08:09:24.963 回答