N1QL:将来自不同级别文档的不同值聚合到一个数组中
N1QL : Aggregate distinct values from different levels of document into a single array
我有以下格式的文件:
{
"firstName": "Emery",
"lastName": "Wing",
"gender" : "F"
"userId": "00Z",
"peers": [
{
"peerId": "42F"
},
{
"peerId": "14A"
}
]
}
,
{
"firstName": "Brian",
"lastName": "Wing",
"gender" : "M"
"userId": "42F",
"peers": [
{
"peerId": "00Z"
},
{
"peerId": "5VH"
}
]
},
{
"firstName": "Kevin",
"lastName": "Hart",
"userId": "22N",
"gender": "M"
},
.......
我想 Select 所有姓氏为 'Wing' 的用户及其同行的详细信息。
如您所见,'peers' 集合存储了其同行文档的元 ID。
为此,我试图将 userId 和 PeerId 存储到一个数组中,然后使用连接来获取所有这些信息,但由于这两个字段处于不同级别,所以无法找到执行此操作的方法。
我使用的查询结果如下:
Select ARRAY_AGG([u.userId,u.peers[*].peerId]) as ID
From user u
Where u.type = 'User'
and u.lastName = 'Wing'
;
我原以为它会创建一个所有值都在同一级别的数组,但我却得到了以下结果:
"ID": [
[
"00Z",
[
"42F",
"14A"
]
],
[
"42F",
[
"00Z",
"5VH"
]
]
]
}
我想要的结果是所有这些不同的 ID,如:
"ID": [
"00Z",
"42F",
"14A"
"5VH"
]
这样我就可以申请加入并获取这些不同 ID 的详细信息。
请帮忙..
Select ARRAY_DISTINCT(ARRAY_FLATTEN(ARRAY_AGG([u.userId,u.peers[*].peerId]),3)) as ID
From user u
Where u.type = 'User'
and u.lastName = 'Wing'
;
或
SELECT
ARRAY_DISTINCT(ARRAY_FLATTEN(ARRAY_AGG(ARRAY_INSERT(IFMISSINGORNULL(u.peers[*].peerId,[]),0,u.userId)),2)) AS ID
FROM user AS u
WHERE u.type = 'User' AND u.lastName = 'Wing';
此查询有效:
Select ARRAY_DISTINCT(ARRAY_FLATTEN(ARRAY_AGG(ARRAY_INSERT(IFMISSINGORNULL(u.peers[*].peerId,[]),0,u.userId)),1)) As ID
From user u
Where u.type = 'User'
and u.lastName = 'Wing'
我有以下格式的文件:
{
"firstName": "Emery",
"lastName": "Wing",
"gender" : "F"
"userId": "00Z",
"peers": [
{
"peerId": "42F"
},
{
"peerId": "14A"
}
]
}
,
{
"firstName": "Brian",
"lastName": "Wing",
"gender" : "M"
"userId": "42F",
"peers": [
{
"peerId": "00Z"
},
{
"peerId": "5VH"
}
]
},
{
"firstName": "Kevin",
"lastName": "Hart",
"userId": "22N",
"gender": "M"
},
.......
我想 Select 所有姓氏为 'Wing' 的用户及其同行的详细信息。 如您所见,'peers' 集合存储了其同行文档的元 ID。
为此,我试图将 userId 和 PeerId 存储到一个数组中,然后使用连接来获取所有这些信息,但由于这两个字段处于不同级别,所以无法找到执行此操作的方法。
我使用的查询结果如下:
Select ARRAY_AGG([u.userId,u.peers[*].peerId]) as ID
From user u
Where u.type = 'User'
and u.lastName = 'Wing'
;
我原以为它会创建一个所有值都在同一级别的数组,但我却得到了以下结果:
"ID": [
[
"00Z",
[
"42F",
"14A"
]
],
[
"42F",
[
"00Z",
"5VH"
]
]
]
}
我想要的结果是所有这些不同的 ID,如:
"ID": [
"00Z",
"42F",
"14A"
"5VH"
]
这样我就可以申请加入并获取这些不同 ID 的详细信息。
请帮忙..
Select ARRAY_DISTINCT(ARRAY_FLATTEN(ARRAY_AGG([u.userId,u.peers[*].peerId]),3)) as ID
From user u
Where u.type = 'User'
and u.lastName = 'Wing'
;
或
SELECT
ARRAY_DISTINCT(ARRAY_FLATTEN(ARRAY_AGG(ARRAY_INSERT(IFMISSINGORNULL(u.peers[*].peerId,[]),0,u.userId)),2)) AS ID
FROM user AS u
WHERE u.type = 'User' AND u.lastName = 'Wing';
此查询有效:
Select ARRAY_DISTINCT(ARRAY_FLATTEN(ARRAY_AGG(ARRAY_INSERT(IFMISSINGORNULL(u.peers[*].peerId,[]),0,u.userId)),1)) As ID
From user u
Where u.type = 'User'
and u.lastName = 'Wing'