用户登录

内容可以包含多个标签,标签可以属于多个内容,用 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,这段子查询得到的是当前这个标签相关的内容列表。

内容与标签《 SurrealDB 多模型数据库:应用实践 》

统计

14696
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点