Javascript 根据第二个收集条件获取收集。在MongoDB

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

我正在努力实现以下目标:

获取用户发送的以“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}

我也尝试过使用这种方法,但这种情况发生在更进一步的性能损失中

有什么建议如何处理,以使其工作更快?我正在寻找不需要我做变通(对象到数组转换)的干净代码。用一些优雅和最正确的方法解决这类问题的方法是什么

@凯文

感谢索引提示,它对性能有很大帮助,并使其:
{“秒”:0,“纳秒”:412133579,“结果”:4396}

尝试向
用户id
字段添加索引。这将提高具有大量记录的集合的性能。

您的集合中有多少记录?用户id字段上有索引吗?总共有10000个用户和1000000条推文。关于索引,好的捕获-比以前快100%{“秒”:0,“纳秒”:412133579,“结果”:4396},这使得它现在比MySQL计时更快。这就是问题的答案吗?或者,如果没有,你可以添加更多的细节,确切地说,你在寻找什么。绩效是一个非常广泛的话题,因此您需要详细说明您希望达到的绩效水平?再次感谢您的回答,是的-它回答了我的问题,但只是部分回答。我希望听到一些关于我的方法的反馈,我有点不喜欢它,这就像做一些不必要的逻辑(将objs解析为查询的数组)。我希望听到其他人的意见/批评,所以我会写得更好。StackOverflow是一个问答网站,通常任何寻求意见的问题都会很快被关闭。我将在下面发布关于添加索引的答案-如果你愿意接受答案,那么你可以继续。如果你想保持问题的开放性,那么我建议你为你所面临的问题添加更具体的细节,这样每个人都可以给出具体的答案