N1QL 值 NOT IN 子查询 which returns 一个数组

N1QL value NOT IN subquery which returns an array

我正在尝试编写一个 N1QL 查询,其中 return 其 ID 不在数组中的所有记录。该数组在另一个文档中找到。

我的播放列表文档示例:{"id":1,"name":"playlist1","tracksId":[1,2]}

My Track 文档示例:{"id":1,"title":"songtitle"}

具体来说,我希望查询 return 在我的播放列表文档的 trackId 数组中找不到其 ID 的所有曲目。

这是我使用子查询解决此问题的最佳尝试:

SELECT * FROM Track
WHERE id NOT IN (SELECT tracksId FROM Playlist WHERE id = 1)

不幸的是,这不起作用,因为我的子查询 return 是一个字段内的数组。 有谁知道解决这个问题的方法吗?

默认情况下,N1QL 查询给出 ARRAY 个 JOSN 对象。 IN 或 NOT IN 的右侧必须是左侧数据类型的 ARRAY。

子查询项目一个元素使用 RAW 避免如下对象。

SELECT * FROM Track
WHERE id NOT IN (SELECT RAW tracksId FROM Playlist WHERE id = 1)

在您的情况下,trackId 是另一个 ARRAY。您可以展平嵌套的 ARRAY 或 UNNEST 并创建一层 ARRAY

SELECT * FROM Track
WHERE id NOT IN ARRAY_FLATTEN((SELECT RAW tracksId FROM Playlist WHERE id = 1),1);

 SELECT * FROM Track
 WHERE id NOT IN (SELECT RAW track FROM Playlist AS p UNNEST p.tracksId As track WHERE p.id = 1);