从ArangoDB中的嵌套文档中获取特定密钥

从ArangoDB中的嵌套文档中获取特定密钥,arangodb,Arangodb,我在ArangoDB中有四个文件Alpha、Alpha1、Alpha2和Alpha3。我想在单个查询中从每个文档中获取与键“MNO”相关的数据。(从交叉发布) 如果我理解正确,您希望检索任意深度的所有属性值,属性键为“MNO” 没有以某种方式展平对象的函数,在AQL中递归是不可能的 如果它总是处于相同的嵌套级别(如果存在),那么就有可能进行硬编码 "Alpha": {"ABC": {"DEF": {"2017": {"GHI JKL"

我在ArangoDB中有四个文件Alpha、Alpha1、Alpha2和Alpha3。我想在单个查询中从每个文档中获取与键“MNO”相关的数据。

(从交叉发布)

如果我理解正确,您希望检索任意深度的所有属性值,属性键为“MNO”

没有以某种方式展平对象的函数,在AQL中递归是不可能的

如果它总是处于相同的嵌套级别(如果存在),那么就有可能进行硬编码

"Alpha":
    {"ABC":
     {"DEF":
         {"2017":
             {"GHI JKL":
                 {"MNO":
                     ["ABCDEFGHIJKLMNOP"]}},
             {"TGY BUG":
                  {"MNO":
                      ["1234567891012456"]}}}}}
"Alpha1":
    {"XYZ":
        {"TUW":
           {"2014":
               {"QRS PQR":
                    {"MNO":
                       ["ZYXWUTSRQPONML"]}}}}}
"Alpha2":
    {"KJM":
       {"LKI":
           {"2005":
              {"MNO":
                 ["POLKIKJUMNHY"]}}}

"Alpha3":
    {"WWW":
       {"CCC DDD":
           {"2011":
               {"MNO":
                    {"POLKIKJUMNHY":"value"}}}}}
我尝试了下面这样的方法,但无法让它从不同的级别选择“MNO”属性。也许有一个逻辑上的缺陷,你可以解决

LET doc = {
  "_id": "remove-me",

  "Alpha": {
    "ABC": {
      "DEF": {
        "2017": {
          "GHI JKL": {
            "MNO": ["ABCDEFGHIJKLMNOP"],

            "PQR": true
          },
          "TGY BUG": {
            "MNO": ["1234567891012456"],
            "WXY": 987
          }
        }
      }
    }
  }
}


FOR a1 IN ATTRIBUTES(doc, true)
  FOR a2 IN ATTRIBUTES(doc[a1], true) || []
    FOR a3 IN ATTRIBUTES(doc[a1][a2], true) || []
      FOR a4 IN ATTRIBUTES(doc[a1][a2][a3], true) || []
        FOR a5 IN ATTRIBUTES(doc[a1][a2][a3][a4], true) || []
          FOR a6 IN ATTRIBUTES(doc[a1][a2][a3][a4][a5], true) || []
            FILTER a6 == "MNO"
              RETURN doc[a1][a2][a3][a4][a5]["MNO"]
              // --or-- if you want to return an object {"MNO": value} for each match
              //RETURN KEEP(doc[a1][a2][a3][a4][a5], "MNO")
(交叉柱从)

如果我理解正确,您希望检索任意深度的所有属性值,属性键为“MNO”

没有以某种方式展平对象的函数,在AQL中递归是不可能的

如果它总是处于相同的嵌套级别(如果存在),那么就有可能进行硬编码

"Alpha":
    {"ABC":
     {"DEF":
         {"2017":
             {"GHI JKL":
                 {"MNO":
                     ["ABCDEFGHIJKLMNOP"]}},
             {"TGY BUG":
                  {"MNO":
                      ["1234567891012456"]}}}}}
"Alpha1":
    {"XYZ":
        {"TUW":
           {"2014":
               {"QRS PQR":
                    {"MNO":
                       ["ZYXWUTSRQPONML"]}}}}}
"Alpha2":
    {"KJM":
       {"LKI":
           {"2005":
              {"MNO":
                 ["POLKIKJUMNHY"]}}}

"Alpha3":
    {"WWW":
       {"CCC DDD":
           {"2011":
               {"MNO":
                    {"POLKIKJUMNHY":"value"}}}}}
我尝试了下面这样的方法,但无法让它从不同的级别选择“MNO”属性。也许有一个逻辑上的缺陷,你可以解决

LET doc = {
  "_id": "remove-me",

  "Alpha": {
    "ABC": {
      "DEF": {
        "2017": {
          "GHI JKL": {
            "MNO": ["ABCDEFGHIJKLMNOP"],

            "PQR": true
          },
          "TGY BUG": {
            "MNO": ["1234567891012456"],
            "WXY": 987
          }
        }
      }
    }
  }
}


FOR a1 IN ATTRIBUTES(doc, true)
  FOR a2 IN ATTRIBUTES(doc[a1], true) || []
    FOR a3 IN ATTRIBUTES(doc[a1][a2], true) || []
      FOR a4 IN ATTRIBUTES(doc[a1][a2][a3], true) || []
        FOR a5 IN ATTRIBUTES(doc[a1][a2][a3][a4], true) || []
          FOR a6 IN ATTRIBUTES(doc[a1][a2][a3][a4][a5], true) || []
            FILTER a6 == "MNO"
              RETURN doc[a1][a2][a3][a4][a5]["MNO"]
              // --or-- if you want to return an object {"MNO": value} for each match
              //RETURN KEEP(doc[a1][a2][a3][a4][a5], "MNO")

上述结构的嵌套无效。您能提供一个正确嵌套的示例吗?上述结构的嵌套无效。您能否提供一个正确嵌套的示例?