Join 使用非关键元素的couchbase n1ql简单内部联接

Join 使用非关键元素的couchbase n1ql简单内部联接,join,nosql,inner-join,couchbase,n1ql,Join,Nosql,Inner Join,Couchbase,N1ql,我有一个名为“test”的couchbase bucket,它有两个文档。这些文档的键是它们各自创建时间的散列值 文件1: 键-3DDD743FD229063273FC1DB076E0C81E7B5077909ABCBA5108FEBF119C3233C 价值- { "empId": 1, "e_name": "abc", "type": "m", "managerId": null } { "empId": 2, "e_name": "def", "type":

我有一个名为“test”的couchbase bucket,它有两个文档。这些文档的键是它们各自创建时间的散列值

文件1:

键-
3DDD743FD229063273FC1DB076E0C81E7B5077909ABCBA5108FEBF119C3233C

价值-

{
  "empId": 1,
  "e_name": "abc",
  "type": "m",
  "managerId": null
}
{
  "empId": 2,
  "e_name": "def",
  "type": "r",
  "managerId": 1
}
文件2:

键-
33D57D98B68A270AC972B1F3921D435BBDB1F5CF5A7BB1BFAC1215EAAC

价值-

{
  "empId": 1,
  "e_name": "abc",
  "type": "m",
  "managerId": null
}
{
  "empId": 2,
  "e_name": "def",
  "type": "r",
  "managerId": 1
}
我正在尝试执行一个内部联接,以便在联接之后,查询将返回如下内容

{
    "empName": "def",
    "managerName": "abc"
}

在这种情况下,我无法在这里执行内部联接,因为联接不在键上。我的问题是如何实现这一点。

在Couchbase Server 5.5之前,您在N1QL中可以执行的唯一连接必须将文档密钥放在连接的一侧

使用Couchbase Server 5.5(目前处于beta版),您可以使用“ANSI联接”来联接文档中的任何字段(更多信息请参见本文),但本质上,您可以使用与关系数据库中相同的方式编写联接。在您的示例中,我不清楚您实际想要加入哪些字段(我想是managerId?),但语法如下所示:

SELECT emp.*, man.*
FROM test emp
INNER JOIN test man ON emp.managerId = man.managerId
如果您还没有准备好使用5.5,那么可能有另一种方法来构造数据以进行这种连接,或者考虑另一种方法(您在这里所做的事情似乎非常相关,但可能不需要)

因为看起来“经理”是“员工”的一种类型,所以经理文档可能包含经理正在管理的员工的文档ID数组。然后,您可以将该数组加入员工文档键。例如:

{
  "empId": 1,
  "e_name": "abc",
  "type": "m",
  "managerId": null,
  "employeesOfThisManager" : [
     "33d57d98b68a270ac972b1f392d21d435bbdb1f5cf5a7bbabb1bfacb1215eaac",
     "33d57d98b68a270ac972b1f392d21d435bbdb1f5cf5a7bbabb1foobarbaz1234"
  ]
}