在 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;