我正在使用mongo数据库开发节点/表达Web API。
但是,对于我应该使用的数据库模式,我有些不确定 使用。
假设我有两个收藏集:post
,comment
。
第一个选项:
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哪个选项?