84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
使用場景是這樣子的:
發表文章時候,有標籤,一遍文章有很多個標籤,
然後用查詢一個標籤時候,怎麼查詢到這個標籤所有的文章? ?
然後整個 mongoodb 的資料設計的想法是怎麼樣子?求大神解答一下嘛,thx
文章包含_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); }); }) }); };
然後在對應的路由呼叫
文章保存的時候在標籤tags數組(外鍵)中加入對應標籤id,同時在對應的所有標籤中增加文章id(外鍵)
這是典型多對多模型,表設計如下
CREATE 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='文章表';
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='标签表';
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資料即可
文章ID標籤ID
如果要查詢一個標籤中的所有文章,用article_tag表左聯(或內聯)article表即可
如果要查詢一個文章的所有標籤,用article_tag表左聯(或內聯)tags表即可
上述兩種情況下,如果還需要標籤或文章的數據,就繼續左聯標籤表或文章表即可。
同意樓上的解決方法,文章一個表,標籤一個表,然後再建一個文章標籤的對應關係表
文章包含_id,title,tags,content
然後,tags又含有很多的tag
_id
title
tags
tag1
tag2
tag3
content
可以這樣去設計
可以寫一個返回特定標籤下的所有文章的方法
然後在對應的路由呼叫
文章保存的時候在標籤tags數組(外鍵)中加入對應標籤id,同時在對應的所有標籤中增加文章id(外鍵)
這是典型多對多模型,表設計如下
文章表article
標籤表tags
文章和標籤關聯表article_tag
具體思路
透過article_tag的外鍵約束,將article表和tags表關聯起來
對於文章標籤的操作,如果標籤已經存在,只需要對article_tag表格資料進行新增或刪除
如果標籤不存在,先加標籤和文章,再給article_tag中加入
文章ID標籤ID
資料即可如果要查詢一個標籤中的所有文章,用article_tag表左聯(或內聯)article表即可
如果要查詢一個文章的所有標籤,用article_tag表左聯(或內聯)tags表即可
上述兩種情況下,如果還需要標籤或文章的數據,就繼續左聯標籤表或文章表即可。
同意樓上的解決方法,文章一個表,標籤一個表,然後再建一個文章標籤的對應關係表