我试图取得成果:
获取用户制作的推文,其中的电子邮件以' a'
开头。var Tweet = mongoose.model('Tweets', new mongoose.Schema({
user_id : String,
text : String,
date : { type: Date, default: Date.now }
})
);
var User = mongoose.model('Users', new mongoose.Schema({
name : String,
email : String,
date : { type: Date, default: Date.now }
})
);
查询如下:
app.get('/mongodb/tweets/users/get', function(req, res, next) {
var time = process.hrtime();
User.find({email : /^a/}, { _id:1 }, function(err, users) {
var dataArr = [];
for(o in users) { dataArr.push(users[o]._id); }
Tweet.find({user_id : { $in : dataArr }}, function(err, tweets) {
var diff = process.hrtime(time);
res.send({ seconds : diff[0], nanoseconds : diff[1], result: tweets.length});
});
});
});
我知道我做错了,因为与普通的MySQL查询相比,这些查询的性能有点糟糕。
推文:{"秒":0,"纳秒":904058152,"结果":4396}
推文(MySQL):{"秒":0,"纳秒":455872373,"结果":4368}
我还试图使用populate()方法,但这种情况在性能上进一步下降。
有任何建议如何处理它以使其更快地工作?我正在寻找不需要我做解决方法的干净代码(对象到阵列转换)。用一些优雅和最正确的方法解决这类问题会是什么?
@kevin
感谢索引提示,它对性能有很大帮助并使其成为: {"秒":0,"纳秒":412133579"导致":4396}
答案 0 :(得分:0)
尝试在user_id
字段中添加索引。这将提高具有大量记录的集合的性能。