Rumah > Soal Jawab > teks badan
Senario penggunaan adalah seperti berikut:
Apabila menerbitkan artikel, tambah tag Terdapat banyak tag dalam artikel,
Kemudian apabila mencari tag, bagaimana untuk menanyakan semua artikel tag ini? ?
Kemudian apakah idea reka bentuk data keseluruhan mongoodb? Tolong beri saya jawapan, thx
phpcn_u15822017-06-30 09:54:50
Artikel mengandungi _id, tajuk, tag, kandungan
Kemudian, tag mengandungi banyak tag
_id
tajuk
tag
tag1
tag2
tag3
kandungan
Anda boleh mereka bentuknya seperti ini
Anda boleh menulis kaedah untuk mengembalikan semua artikel di bawah tag tertentu
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);
});
})
});
};
Kemudian panggilnya di laluan yang sepadan
習慣沉默2017-06-30 09:54:50
Apabila menyimpan artikel, tambahkan id teg yang sepadan pada tatasusunan tag (kunci asing), dan pada masa yang sama tambahkan id artikel (kunci asing) pada semua teg yang sepadan
phpcn_u15822017-06-30 09:54:50
Ini adalah model tipikal banyak-ke-banyak, reka bentuk meja adalah seperti berikut
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='文章标签表';
Kaitkan jadual artikel dan jadual tag melalui kekangan kunci asing bagi article_tag
Untuk operasi tag artikel, jika tag sudah wujud, anda hanya perlu menambah atau memadam data jadual tag_artikel
Jika teg tidak wujud, tambahkan teg dan artikel dahulu, kemudian tambahkan 文章ID<->标签ID
data ke article_tag
Jika anda ingin menanyakan semua artikel dalam teg, gunakan jadual article_tag untuk meninggalkan (atau sebaris) jadual artikel
Jika anda ingin menanyakan semua teg artikel, gunakan jadual teg_artikel untuk meninggalkan (atau sebaris) jadual teg
Dalam dua kes di atas, jika anda masih memerlukan data tag atau artikel, teruskan sahaja ke kiri-menyertai jadual tag atau jadual artikel.
女神的闺蜜爱上我2017-06-30 09:54:50
Saya bersetuju dengan penyelesaian di atas Satu jadual untuk artikel, satu jadual untuk tag, dan kemudian buat jadual tag artikel yang sepadan