Join 使用非关键元素的couchbase n1ql简单内部联接
我有一个名为“test”的couchbase bucket,它有两个文档。这些文档的键是它们各自创建时间的散列值 文件1: 键-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":
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"
]
}