在 Couchbase Nest 右侧数组中包含文档 ID
Include document id on Couchbase Nest right hand side array
我有一个嵌套操作,将 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,我该怎么做?
我不知道是否有更简单的解决方案,但我通过用 ARRAY, and adding it a new property with OBEJECT_ADD
迭代数组的每个项目来解决它
SELECT left.*,ARRAY OBJECT_ADD(item, "id", META(item).id) FOR item IN right END
FROM bucket AS left
LEFT NEST bucket AS right
ON META(right).id IN left.array
META(item).id 仅在项目是存储桶别名的情况下有效,否则它 returns 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;
我有一个嵌套操作,将 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,我该怎么做?
我不知道是否有更简单的解决方案,但我通过用 ARRAY, and adding it a new property with OBEJECT_ADD
迭代数组的每个项目来解决它SELECT left.*,ARRAY OBJECT_ADD(item, "id", META(item).id) FOR item IN right END
FROM bucket AS left
LEFT NEST bucket AS right
ON META(right).id IN left.array
META(item).id 仅在项目是存储桶别名的情况下有效,否则它 returns 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;