我有两种模式:
这是第一个:
var CommentSchema = new Schema({
title: {
type: String
},
owner: {
type: Schema.ObjectId,
ref: 'User'
}
});
这是第二个:
var UserSchema = new Schema({
name: {
type: String
},
comments: [{
type: Schema.ObjectId,
ref: 'Comment'
}]
});
确实有很多评论。所以,我在所有者的评论数组中添加每个评论的ID。目标是创建一个简单的功能,例如"列出我的评论"。 实际上这些评论非常简洁,我使用此代码添加新评论:
var comment = ...
comment.title = "title";
comment.owner = req.user
comment.save(function(err) {
if (err)
...
else {
User.findOne({ _id: req.user._id }, function (err, tmpUser){
tmpUser.comments.push(comment);
tmpUser.save(function(err) {
if (err)
...
else {
//END
}
});
});
}
}
如何优化此代码?是否可以直接优化模型?谢谢!
答案 0 :(得分:1)
为什么不简单地查询Comments集合?如果您在有大量评论时担心性能,可以(并且应该)索引所有者字段。
db.comments.ensureIndex( { owner: 1 } )
然后使用mongoose:
Comment.find({ owner: req.user._id }, function(err, comments) {
// do something with comments
});