Maison > Questions et réponses > le corps du texte
Le scénario d'utilisation est le suivant :
Lors de la publication d'un article, ajoutez des balises. Il y a de nombreuses balises dans un article,
Alors lors de la recherche d'un tag, comment interroger tous les articles de ce tag ? ?
Alors, quelle est l'idée globale de conception de données de mongoodb ? S'il vous plaît, donnez-moi quelques réponses, merci
phpcn_u15822017-06-30 09:54:50
L'article contient _id, title, tags, content
Ensuite, les tags contiennent de nombreuses balises
_id
titre
étiquettes
tag1
tag2
tag3
contenu
Vous pouvez le concevoir comme ceci
Vous pouvez écrire une méthode pour renvoyer tous les articles sous une balise spécifique
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);
});
})
});
};
Puis appelez-le dans l'itinéraire correspondant
習慣沉默2017-06-30 09:54:50
Lors de l'enregistrement de l'article, ajoutez l'identifiant de balise correspondant au tableau de balises (clé étrangère), et en même temps ajoutez l'identifiant de l'article (clé étrangère) à toutes les balises correspondantes
phpcn_u15822017-06-30 09:54:50
Il s'agit d'un modèle plusieurs-à-plusieurs typique, la conception de la table est la suivante
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='文章标签表';
Associer la table article et la table tags via la contrainte de clé étrangère de article_tag
Pour les opérations de balise d'article, si la balise existe déjà, il vous suffit d'ajouter ou de supprimer les données de la table article_tag
Si la balise n'existe pas, ajoutez d'abord la balise et l'article, puis ajoutez 文章ID<->标签ID
data à article_tag
Si vous souhaitez interroger tous les articles d'une balise, utilisez la table article_tag pour rejoindre à gauche (ou en ligne) la table d'articles
Si vous souhaitez interroger toutes les balises d'un article, utilisez la table article_tag pour rejoindre à gauche (ou en ligne) la table des balises
Dans les deux cas ci-dessus, si vous avez encore besoin de données de balise ou d'article, continuez simplement à créer un lien gauche vers la table de balises ou la table d'articles.
女神的闺蜜爱上我2017-06-30 09:54:50
Je suis d'accord avec la solution ci-dessus. Un tableau pour les articles, un tableau pour les balises, puis créez un tableau correspondant de balises d'articles