couchbase - 在 Couchbase Nest 右侧数组中包含文档 ID
问题描述
我有一个嵌套操作,它将一组 id 与一些文档连接起来。
SELECT left.*,right FROM bucket AS left
LEFT NEST bucket AS right
ON META(right).id IN left.array
结果
[
{
array : ["rightId1","rightId2"],
right : [ { < rightFields1 > }, { < rightFields2 > } ]
}
]
我需要返回的文档(< rightFields >)在其字段之一上有 id,我该怎么做?
解决方案
META(item).id 仅在 item 是存储桶别名的情况下有效,否则返回 MISSING。
在这种情况下,前 2 个是正确的方法,因为您有右侧的文档键。
SELECT left.*,
(SELECT META(r).id, r.*
FROM bucket AS r USE KEYS left.array) AS right
FROM bucket AS left;
或者
SELECT left.*, right
FROM bucket AS left
LET right = (SELECT META(r).id, r.*
FROM bucket AS r USE KEYS left.array);
如果您确实需要处理正确的文档并将它们用作数组而不是 NEST(不处理),您应该使用 JOIN、GROUP BY 和 ARRAY_AGG()
SELECT left.*,
ARRAY_AGG(OBJECT_ADD(right,"id",META(right).id)) AS right
FROM bucket AS left
LEFT JOIN bucket AS right ON KEYS left.array
GROUP BY left;
推荐阅读
- angular - Angular DataService 无法解析参数
- android - 呼叫断开在android Oreo中不起作用
- angular - 按条件将 ElementRef 替换为 TemplateRef
- html - Material Design 复选框在数据表中创建一个新行
- django - Django Admin - 禁用特定模型实例的编辑链接
- python-3.x - Keras 的神经网络 ValueError
- copy - 递归地将文件从子文件夹复制到文件夹并将其重命名为文件夹并压缩所有子文件夹
- php - 从 preg_match_all 中的 html 代码中获取元素的内容
- vue.js - 模块构建失败:错误:没有给出解析器和文件路径,无法在 nuxtjs 中推断出解析器
- php - MySQL - 如何让 SQL 中的用户访问不同的文件