Javascript 根据第二个收集条件获取收集。在MongoDB
我正在努力实现以下目标: 获取用户发送的以“a”开头的推文。Javascript 根据第二个收集条件获取收集。在MongoDB,javascript,mongodb,mongoose,Javascript,Mongodb,Mongoose,我正在努力实现以下目标: 获取用户发送的以“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
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}
我也尝试过使用这种方法,但这种情况发生在更进一步的性能损失中
有什么建议如何处理,以使其工作更快?我正在寻找不需要我做变通(对象到数组转换)的干净代码。用一些优雅和最正确的方法解决这类问题的方法是什么
@凯文
感谢索引提示,它对性能有很大帮助,并使其:
{“秒”:0,“纳秒”:412133579,“结果”:4396}尝试向
用户id
字段添加索引。这将提高具有大量记录的集合的性能。您的集合中有多少记录?用户id字段上有索引吗?总共有10000个用户和1000000条推文。关于索引,好的捕获-比以前快100%{“秒”:0,“纳秒”:412133579,“结果”:4396},这使得它现在比MySQL计时更快。这就是问题的答案吗?或者,如果没有,你可以添加更多的细节,确切地说,你在寻找什么。绩效是一个非常广泛的话题,因此您需要详细说明您希望达到的绩效水平?再次感谢您的回答,是的-它回答了我的问题,但只是部分回答。我希望听到一些关于我的方法的反馈,我有点不喜欢它,这就像做一些不必要的逻辑(将objs解析为查询的数组)。我希望听到其他人的意见/批评,所以我会写得更好。StackOverflow是一个问答网站,通常任何寻求意见的问题都会很快被关闭。我将在下面发布关于添加索引的答案-如果你愿意接受答案,那么你可以继续。如果你想保持问题的开放性,那么我建议你为你所面临的问题添加更具体的细节,这样每个人都可以给出具体的答案