(https://groups.google.com/forum/#!topic/arangodb/LshKkQMH7lgからクロスポスト)
私が正しく理解していれば、あなたは、任意の深さで、「MNO」の属性キーで、すべての属性値を取得します。
何らかの方法でオブジェクトをフラット化する機能はなく、AQLでは再帰ができません。
常に同じネストレベル(存在する場合)であれば、ハードコードすることができます。
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」属性を選択しますすることができませんでした。たぶんあなたが解決できる論理的な欠陥があります。
LET doc = {
"_id": "remove-me",
"Alpha": {
"ABC": {
"DEF": {
"2017": {
"GHI JKL": {
"MNO": ["ABCDEFGHIJKLMNOP"],
"PQR": true
},
"TGY BUG": {
"MNO": ["1234567891012456"],
"WXY": 987
}
}
}
},
"DEF2": {
"MNO": 67
}
},
"Beta": {
"MNO": "Beta MNO",
"XXX": false,
"YYY": null
}
}
LET v0 = []
FOR a1 IN ATTRIBUTES(doc, true)
LET v1 = APPEND(v0, a1 == "MNO" ? doc["MNO"] : [])
FOR a2 IN ATTRIBUTES(doc[a1], true) || []
LET v2 = APPEND(v1, a2 == "MNO" ? doc[a1]["MNO"] : [])
FOR a3 IN ATTRIBUTES(doc[a1][a2], true) || []
LET v3 = APPEND(v2, a3 == "MNO" ? doc[a1][a2]["MNO"] : [])
FOR a4 IN ATTRIBUTES(doc[a1][a2][a3], true) || []
LET v4 = APPEND(v3, a4 == "MNO" ? doc[a1][a2][a3]["MNO"] : [])
FOR a5 IN ATTRIBUTES(doc[a1][a2][a3][a4], true) || []
LET v5 = APPEND(v4, a5 == "MNO" ? doc[a1][a2][a3][a4]["MNO"] : [])
FOR a6 IN ATTRIBUTES(doc[a1][a2][a3][a4][a5], true) || []
LET v6 = APPEND(v5, a6 == "MNO" ? doc[a1][a2][a3][a4][a5]["MNO"] : [])
RETURN v6
上記の構造のネストは無効です。 適切にネストされた例を提供できますか? – stj