内容可以包含多个标签,标签可以属于多个内容,用 Record Link 或者 Graph Edge 都可以表达这种关系。
在创建内容数据的时候,我们在内容数据里记录了一下内容相关的标签列表。复制一份请求,名字改成“内容与标签”。
先执行一下 SELECT * FROM post; 在内容列表项目里面会有一个 tags 属性,它的值是一个数组,数组项目是标签内容的 id。再 FETCH 一下 tags,这回结果里面就会包含标签的具体数据。
CONTAINS
下面我们再写一条查询,可以获取到包含某个标签的内容列表。用 WHERE 设置一个条件,tags CONTAINS tag:lou,得到的结果就是包含 id 是 tag:lou 的内容项目。再试一下 tag:hua ,得到的就是包含 tag:hua 的内容列表。
CONTAINSANY/CONTAINSALL
这里用的 CONTAINS 是一个操作符,我们可以再试一下 CONTAINSANY 这个操作符,提供一个数组,里面添加一个 tag:feng,还有 tag:hua。这次得到的结果就是包含 '风' 或者 '花' 标签的内容项目。
再试一下 CONTAINSALL 这个操作符,提供的值是 tag:wu 还有 tag:hua,这次得到的结果就是同时包含“雾”还有“花”这两个标签的内容。
tag
再写一段查询,SELECT * FROM tag,查询出来的东西是一组标签列表。
在这个查询里用一段子查询统计一下标签相关的内容的数量,用一下 count 函数,给统计的结果起个名字叫 totalPosts。在 count 里面写一段子查询。SELECT * FROM post WHERE tags CONTAINS $parent.id ,这个 $parent.id 在这里指的就是标签的 id。
提示了一个错误,这是因为子查询需要放在一组括号里。再执行一下这段查询。
在查询结果里面现在会包含一个 totalPosts,这个字段的值就是标签相关的内容数量 。
再添加一段子查询,给查询的结果起个名字叫 posts 。SELECT id, title FROM post,WHERE tags CONTAINS $parent.id,这段子查询得到的是当前这个标签相关的内容列表。