gpt4 book ai didi

arrays - Couchbase 中数组的迭代对象

转载 作者:行者123 更新时间:2023-12-04 14:50:10 25 4
gpt4 key购买 nike

如何迭代数组的对象以从 JSON 对象中获取特定的键值对。我正在使用 Couchbase 服务器。请为 Couchbase 建议 N1QL。

下面是我的JSON格式

{
"A":{
"B":{
"C": {
"D":[
{
"attr":[
{
"Name" : "abc"
}
],
"Name" : "outer"
}

], ​
"E":[
{
"attr":[
{
"Name" : "xyz"
}
],
"Name" : "outer1"
}
​]
}
}
}
}

想要在对象 C 的每个数组中检索 Name 属性的值。请注意 Array 中有两个同名的字段,所以只想访问外部的一个。 C 中的键值对是动态的。

提前致谢!

最佳答案

如果你真的在寻找路径 A.B.C 的所有名称对象使用以下表达式

ARRAY v.Name FOR v WITHIN A.B.C WHEN v.Name IS NOT MISSING END


SELECT ARRAY v.Name
FOR v WITHIN d.A.B.C
WHEN v.Name IS NOT MISSING
END AS val
FROM [{ "A":{ "B":{ "C": { "D":[{"Name" : "test1", "state" : "state1"} ],
"E":[{"Name" : "test2", "state" : "state2"} ],
"F":[{"Name" : "test2", "state" : "state2"} ]
}
}
}
}
] AS d;

{
"val": [
"test1",
"test2",
"test2"
]
}

如果您只需要选择一些,则需要在该对象中始终存在一些其他字段。

ARRAY v.Name FOR v WITHIN A.B.C WHEN v.Name IS NOT MISSING AND v.attr IS NOT MISSING END

SELECT ARRAY v.Name FOR v WITHIN d.A.B.C WHEN v.Name IS NOT MISSING AND v.attr IS NOT MISSING END
FROM [{ "A":{ "B":{ "C": { "D":[ { "attr":[ { "Name" : "abc" } ], "Name" : "outer" } ], "E":[ { "attr":[ { "Name" : "xyz" } ], "Name" : "outer1" } ] } } } }] AS d;

如果您已经知道预定义的路径(不要使用递归)。构造动态字段对象值的 ARRAY。由于该值已经被 ARRAY 扁平化了 1 级,因此遍历 ARRAY 并获得名称。如果您需要独特的使用 ARRAY_DISTINCT()

ARRAY v.Name FOR v IN  ARRAY_FLATTEN((ARRAY nv FOR n:nv IN d.A.B.C END),1) END

SELECT ARRAY v.Name FOR v IN ARRAY_FLATTEN((ARRAY nv FOR n:nv IN d.A.B.C END),1) END AS obj
FROM [{ "A":{ "B":{ "C": { "D":[ { "attr":[ { "Name" : "abc" } ], "Name" : "outer" } ], "E":[ { "attr":[ { "Name" : "xyz" } ], "Name" : "outer1" } ] } } } }] AS d;

关于arrays - Couchbase 中数组的迭代对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69225177/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com