情形1
var MessageSchema = new Schema({
text: {type: String, required: true}
});
var UserSchema = new Schema({
..
messages: {type: [MessageSchema], required: false}
});
UserSchema.find({_id:id},'messages',function(err, messages){
// case 1
});
VS
情形2
var MessageSchema = new Schema({
text: {type: String, required: true},
userId: {type:Schema.Types.ObjectId, required: true}
});
MessageSchema.find({userId:id}, function(err, messages){
//case 2
});
我只知道mongodb如何操纵这两种方法。
答案 0 :(得分:2)
我假设您正在比较为用户查找所有文档的方法。
在第一种情况下,_id将自动编入索引,因此查找速度很快,并且在用户文档发布时将加载消息。
在第二种情况下,假设您在消息userID上添加索引,则find将在索引中查找userID并加载与userID匹配的所有文档。
因此,如果您正在优化查找和访问消息,则第一种情况应该更快。
但是,如果您正在优化消息添加并且您有大量消息并且经常添加新消息,则在第一种情况下,用户文档将会增长和移动。它可能会达到文档大小限制。正在保存更大的文件。
有关更多详细信息,请参阅本指南,其中详细讨论了引用和嵌入文档之间的权衡。
http://docs.mongodb.org/manual/MongoDB-data-models-guide.pdf
我希望这会有所帮助。