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'