couchbase - Couchbase 双嵌套数组中每个项目的子查询
问题描述
拥有下一个对象
"a" : {
"id" : "1",
"arr" : [
{"id" : "b1"}, {"id" : "b2"}
]
}
"b1" : {
"id" : "b1",
"innerArr" : [{"id" : "c1"},{"id" : "c2"}]
}
"b2" : {
"id" : "b2",
"innerArr" : [{"id" : "c3"}]
}
"c1" : {
"name" : "c1"
}...
现在我可以通过这样的数组加入 NEST 了。
SELECT *
FROM bucket AS a
NEST bucket AS bs
ON META(a).id IN a.arr[*].id
{
"id" : "1",
"arr" : [
{"id" : "b1"}, {"id" : "b2"}
],
"bs" : [
{
"id" : "b1",
"innerArr" : [{"id" : "c1"},{"id" : "c2"}]
},
{
"id" : "b2",
"innerArr" : [{"id" : "c3"}]
}
]
}
现在我想c
为每个项目嵌套文档bs
添加此 NEST 不起作用
NEST bucket AS c
ON META(c).id IN bs[*].innerArr[*].id
我正在寻找这个结果:
{
"id" : "1",
"arr" : [
{"id" : "b1"}, {"id" : "b2"}
],
"bs" : [
{
"id" : "b1",
"innerArr" : [{"id" : "c1"},{"id" : "c2"}],
"cs" : [{"name" : "c1"},{"name" : "c2"}]
},
{
"id" : "b2",
"innerArr" : [{"id" : "c3"}],
"cs" : [{"name" : "c3"}]
}
]
}
解决方案
我能够从bs
子查询中迭代每个元素来解决它。由于子查询在查询的 SELECT 部分,它必须有 USE KEYS 而不是 ON META().id =。最后,我将子查询结果添加到每个项目。
SELECT a*.
,ARRAY OBJECT_ADD(item, "cs", (SELECT c.* FROM bucket AS c USE KEYS item.innerArr[*].id)) FOR item IN bs END
FROM bucket AS a,
NEST bucket AS bs
ON META(a).id IN a.arr[*].id
这意味着对于其中的每个元素,bs
都会查询 innerArray 的每个元素。然后将结果添加到 的元素中bs
。
推荐阅读
- python - 基于一维列表从二维列表中删除元素
- jquery - 带有手动输入和动态最小日期的 jQuery UI 日期选择器
- javascript - 无法绑定到“formGroup”,因为它不是“form”的已知属性。(" 在角度 7
- c++ - C++中调用成员函数时是否需要使用->操作符?
- python - 从函数返回所有路径值
- javascript - ChartJS 在模态/弹出窗口内,图表显示 0px 高度
- curl - 我的网站托管了 Amazon S3 下载 index.html 虽然我的内容类型是 type/html
- .net - 从公钥验证签名,在 BouncyCastle 中自动检测算法
- bash - 无法检查 mac bash 中的错误值
- wikipedia - 按页面从(法语)维基百科获取总页面浏览量