couchbase - 在 Couchbase Nest 右侧数组中包含文档 ID

标签 couchbase sql++

我有一个嵌套操作,它将 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;

关于couchbase - 在 Couchbase Nest 右侧数组中包含文档 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62311921/

相关文章:

server - couchbase 服务器中的集群/桶是什么

couchbase - N1QL - 如何获取所有文档 ID 作为简单的 JSON 数组?

java - N1QL 二级索引不适用于参数化 IN 子句

java - 如何从 Couchbase 存储桶中获取最后插入的 Counter_id?

node.js - 沙发底座错误 : Data received on socket was not in the expected format - couchbase?

Node.js 和 Couchbase 兼容性

alias - 如何使用别名将字段重命名为 Couchbase N1QL 查询中对象的嵌套字段

android - CouchBase - 在 Android Studio 中找不到 JavaContext

couchbase - 不清楚的错误,无效的功能搜索。 - 在 )

Couchbase N1QL 数组查询