mongoose在这种情况下,子文件和全局文件有什么不同?

情况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如何操纵这两种方法。

我假设你正在比较为用户查找所有文档的方法。

在第一种情况下,_id将被自动编入索引,因此查找速度很快,并且在用户文档时消息将被加载。

在第二种情况下,假设您在消息userID上添加索引,则查找将在索引中查找userID并加载与userID匹配的所有文档。

因此,如果您正在为查找和访问消息进行优化,则第一种情况应该总是更快。

但是,如果您正在优化消息添加,并且您有大量消息并且新增消息,则在第一种情况下,用户文档将会增长和移动。 它可能达到文件大小限制。 一个更大的文件正在被保存。

有关更多详细信息,请参阅本指南,其中讨论了引用和embedded文档之间的权衡。

http://docs.mongodb.org/manual/MongoDB-data-models-guide.pdf

我希望这有帮助。