我目前的一个项目中使用mongoose,还在测试环境中显示一个文章竟然要300-400ms以上,文章列表要1000-2000ms. 远远慢于cnodejs的速度,目测慢个3-4倍左右。是我使用不当,还是mongoose本身的瓶颈呢?
为什么cnodejs没有使用mongoose呢?如果换成jugglingdb是否会好些,但jugglingdb如何实现调用sub document呢,例如 article.user (本身是ObjectId),通过population,可以得到对象,就可以访问article.user.name了。
Article Model代码:
var ArticleSchema = new Schema({
title: {type : String, default : '', trim : true},
body: {type : String, default : '', trim : true},
user: {type : Schema.ObjectId, ref : 'User'},
comments: [{
body: { type : String, default : '' },
user: { type : Schema.ObjectId, ref : 'User' },
createdAt: { type : Date, default : Date.now }
}],
tags: {type: [] , get: getTags, set: setTags},
image: {
cdnUri: String,
files: []
},
createdAt : {type : Date, default : Date.now}
})
load: function (id, cb) {
this.findOne({ _id : id },function(err,result){
console.log('Found article id:',id);
})
.populate('user', 'name email username')
.populate('comments.user')
.exec(cb)
},
list: function (options, cb) {
var criteria = options.criteria || {}
this.find(criteria,function(err,result){
})
.populate('user', 'name username')
.sort({'createdAt': -1}) // sort by date
.limit(options.perPage)
.skip(options.perPage * options.page)
.exec(cb)
}