我正在尝试为我的新项目建模结构。我来自关系数据库背景,我试图了解如何最好地建立关系模型,例如,帖子中可以包含多个标签。我的用例如下:
到目前为止,我得到的是以下型号
const PostSchema = new Schema({
post: String,
tags: [{
type: Schema.Types.ObjectId,
ref: 'Tag'
}],
updated: {
type: Date,
default: Date.now
}
});
const TagSchema = new Schema({
name: {
type: String,
unique: true,
required: true
},
updated: {
type: Date,
default: Date.now
}
});
问题1 :这对我的用例来说是一个很好的设置吗?
我看到的优点是,我可以使用标签模型轻松搜索新闻标签,并且每个标签都是唯一的。我一直遇到的问题是,当用户创建/更新帖子时,我不确定如何处理请求。
当前,我在post#create端点中具有以下逻辑
Post.create(req.body, (err, text) => {
if (err) {
res.send({ 'error': 'An error has occurred' });
} else {
const newTags = req.body.tags.filter(tag => tag._id === undefined && tag.name);
Tag.init().then(() => {
Tag.create(newTags.map(tag => tag.name), (err, tags) => {
tags.forEach(tag => { text.tags.push(tag) });
text.save();
})
});
res.send(text);
}
});
此端点上的请求正文可能类似于
{
"post": "Post message",
"tags": [
{ "_id": "1234" }, // Existing tag
{ "name": "my tag" } // New tag
]
}
问题2 :是否有比上述代码更好/更轻松的方法来实现这一目标?