javascript - 请问,一个文章有多个标签,一个标签下面有多篇文章,用 mogoose 怎么设计表?
问题描述
使用场景是这样子的:
发表文章时候,带有标签,一遍文章有很多个标签,
然后用查询一个标签时候,怎么查询到这个标签所有的文章??
然后整个 mongoodb 的数据设计的思路是怎么样子?求大神解答一下嘛,thx
问题解答
回答1:文章包含_id,title,tags,content然后,tags又含有很多的tag
_id
title
tags
tag1
tag2
tag3
content
可以这样去设计可以写一个返回特定标签下的所有文章的方法
Post.getTag=function(tag,callback){ mongodb.open(function(err,db){if(err){ return callback(err);}db.collection(’posts’,function(err,collection){ if(err){mongodb.close();return callback(err); } collection.find({'tags':tag },{'name':1,'time':1,'title':1 }).sort({time:-1 }).toArray(function(err,docs){mongodb.close();if(err){ return callback(err);}callback(null,docs); });}) });};
然后在对应的路由调用
回答2:文章保存的时候向标签tags数组(外键)中添加对应标签id,同时在对应的所有标签中增加文章id(外键)
回答3:这是典型多对多模型,表设计如下
文章表articleCREATE TABLE `article` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT ’文章ID’, `title` varchar(100) NOT NULL DEFAULT ’’ COMMENT ’标题’, `content` longtext COMMENT ’文章内容’, ..., PRIMARY KEY (`id`)) ENGINE=InnoDB COMMENT=’文章表’;标签表tags
CREATE TABLE `tags` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT ’标签ID’, `name` varchar(30) NOT NULL DEFAULT ’’ COMMENT ’标签名’, PRIMARY KEY (`id`),) ENGINE=InnoDB COMMENT=’标签表’;文章和标签关联表article_tag
CREATE TABLE `article_tag` ( `article_id` int(11) unsigned DEFAULT ’0’ COMMENT ’文章ID’, `tag_id` int(11) unsigned DEFAULT ’0’ COMMENT ’标签ID’, KEY `FK_article_tag_tag_id` (`tag_id`), KEY `FK_article_tag_article_id` (`article_id`), CONSTRAINT `FK_article_tag_article_id` FOREIGN KEY (`article_id`) REFERENCES `article` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `FK_article_tag_tag_id` FOREIGN KEY (`tag_id`) REFERENCES `tags` (`id`) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB COMMENT=’文章标签表’;具体思路
通过article_tag的外键约束,将article表和tags表关联起来
对于文章标签的操作,如果标签已经存在,只需要对article_tag表数据进行添加或者删除
如果标签不存在,先添加标签和文章,再给article_tag中加入文章ID<->标签ID数据即可
如果要查询一个标签中的所有文章,用article_tag表左联(或者内联)article表即可
如果要查询一个文章的所有标签,用article_tag表左联(或者内联)tags表即可
上述两种情况下,如果还需要标签或文章的数据,就继续左联标签表或者文章表即可。
回答4:同意楼上的解决办法,文章一个表,标签一个表,然后再建一个文章标签的对应关系表
相关文章:
1. javascript - 请问一下红框里的冒号是什么意思2. javascript - 请问如何不让type=number的Input,不可输入加号减号和多个小数点?3. javascript - 请问这个叫什么?移动端用什么插件写方便一些?4. javascript - 请问w3c里面这个js案例,我用window.onload来写怎么点击结束按钮之后,再点击开始,从0计数5. javascript - 请问div是个链接,鼠标移上去能出现一个div,比如查看更多按钮,怎么做?6. javascript - 请问一下大家,这样的日期样式是使用什么日期框架来做的?7. javascript - 请问这个流程进度条是怎么和后端数据进行联动的?O(∩_∩)O谢谢!8. javascript - 请问在style样式里写了{{数据绑定}},当数据变更时,外观样式会自动即时刷新吗?这时应用style还是ng-style?9. javascript - 请问一下有一个网址,有的安卓手机打开图片显示不出来,图片是存在七牛上面的,这个是什么地方出现了问题10. javascript - 请问一下react-native 布局的时候,尺寸的大小是如何确定的呢?