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);
我正在尝试编写一个 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);