mongoose在这种情况下,子文档和全局之间的性能有什么不同吗?

时间:2013-12-24 01:54:47

标签: performance node.js mongodb

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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

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

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

我希望这会有所帮助。