javascript - Maafkan saya, jika artikel mempunyai berbilang tag dan terdapat berbilang artikel di bawah satu tag, bagaimana untuk mereka bentuk jadual menggunakan mogoose?
给我你的怀抱
给我你的怀抱 2017-06-30 09:52:50
0
4
763

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

给我你的怀抱
给我你的怀抱

membalas semua(4)
phpcn_u1582

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

習慣沉默

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_u1582

Ini adalah model tipikal banyak-ke-banyak, reka bentuk meja adalah seperti berikut

Artikel jadual artikel

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='文章表';

tag tablettag

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='标签表';

Jadual persatuan artikel dan tag 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='文章标签表';

Idea khusus

  • 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<->标签IDdata 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.

女神的闺蜜爱上我

Saya bersetuju dengan penyelesaian di atas Satu jadual untuk artikel, satu jadual untuk tag, dan kemudian buat jadual tag artikel yang sepadan

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!