【问题标题】:How to iterate nested JSON with ArangoDB?如何使用 ArangoDB 迭代嵌套的 JSON?
【发布时间】:2015-11-29 21:02:43
【问题描述】:

我有带有下一个结构的 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,我应该如何编写这样的查询?

【问题讨论】:

    标签: json arangodb aql


    【解决方案1】:

    在主要层面上,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] 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多