我是MongoDB的新手 - 来自关系数据库背景.我想设计一个带有一些注释的问题结构,但我不知道用于评论的关系:embed或者reference?
有一些注释的问题,比如stackoverflow,会有这样的结构:
Question
title = 'aaa'
content = bbb'
comments = ???
Run Code Online (Sandbox Code Playgroud)
首先,我想使用嵌入式注释(我认为embed在MongoDB中推荐),如下所示:
Question
title = 'aaa'
content = 'bbb'
comments = [ { content = 'xxx', createdAt = 'yyy'},
{ content = 'xxx', createdAt = 'yyy'},
{ content = 'xxx', createdAt = 'yyy'} ]
Run Code Online (Sandbox Code Playgroud)
很清楚,但我担心这种情况:如果我想编辑指定的评论,我该如何获取其内容及其问题?没有_id让我找到一个,也没有question_ref让我找到它的问题.(我是新手,我不知道如果没有_id和没有任何方法可以做到这一点question_ref.)
我必须用ref不embed?然后我必须创建一个新的评论集合?
使用Mongoose填充和直接对象包含之间是否存在任何性能差异(查询的处理时间)?什么时候应该使用?
猫鼬人口例子:
var personSchema = Schema({
_id : Number,
name : String,
stories : [{ type: Schema.Types.ObjectId, ref: 'Story' }]
});
var storySchema = Schema({
_creator : { type: Number, ref: 'Person' },
title : String,
});
Run Code Online (Sandbox Code Playgroud)
Mongoose对象嵌套示例:
var personSchema = Schema({
_id : Number,
name : String,
stories : [storySchema]
});
var storySchema = Schema({
_creator : personSchema,
title : String,
});
Run Code Online (Sandbox Code Playgroud) 我的设计中有FlashcardSchemas和PackageSchemas.一个闪存卡可以属于不同的包,一个包可以包含不同的闪存卡.
您可以在下面看到我的mongoose模式定义的精简版本:
// package-schema.js
var Schema = mongoose.Schema,
ObjectId = Schema.ObjectId;
var PackageSchema = new Schema({
id : ObjectId,
title : { type: String, required: true },
flashcards : [ FlashcardSchema ]
});
var exports = module.exports = mongoose.model('Package', PackageSchema);
// flashcard-schema.js
var Schema = mongoose.Schema,
ObjectId = Schema.ObjectId;
var FlashcardSchema = new Schema({
id : ObjectId,
type : { type: String, default: '' },
story : { type: String, default: '' },
packages : [ PackageSchema ]
});
var …Run Code Online (Sandbox Code Playgroud)