为oneToMany

时间:2019-04-05 13:41:15

标签: node.js mongodb

我正在使用mongo数据库开发节点/表达Web API。

但是,对于我应该使用的数据库模式,我有些不确定 使用。

假设我有两个收藏集:postcomment


第一个选项:

const postSchema = new mongoose.Schema({
    title: { type: String, required: true },
    content: { type: type: String, required: true },
    comments: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Comment' }]
}, { timestamps: true })

const commentSchema = new mongoose.Schema({
    content: { type: type: String, required: true }
}, { timestamps: true })

这将允许我在一个查询中获取帖子的所有评论,但是似乎很奇怪在评论中没有postId,如果我想选择帖子的所有评论,则必须查询整个帖子。


第二个选项:

const postSchema = new mongoose.Schema({
    title: { type: String, required: true },
    content: { type: type: String, required: true }
}, { timestamps: true })

const commentSchema = new mongoose.Schema({
    content: { type: type: String, required: true },
    post: { type: mongoose.Schema.Types.ObjectId, ref: 'Comment' }
}, { timestamps: true })

除了现在我需要执行第二次查询以获取帖子评论之外,我看不到其他缺点。


第三种选择:

const postSchema = new mongoose.Schema({
    title: { type: String, required: true },
    content: { type: type: String, required: true },
    comments: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Comment' }]
}, { timestamps: true })

const commentSchema = new mongoose.Schema({
    content: { type: type: String, required: true },
    post: { type: mongoose.Schema.Types.ObjectId, ref: 'Post' }
}, { timestamps: true })

这将是开发时最简单的使用方式(不是说其他​​两个很难),因为我可以在不选择帖子本身的情况下获取帖子的所有评论,或者选择帖子并在不运行帖子的情况下获取所有评论第二个查询。但是结构看起来有些笨拙


我知道第四个选择是使用关系数据库,因为可惜我不能。

那么通常建议对mongodb使用oneToMany哪个选项?

0 个答案:

没有答案