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

时间:2015-02-02 22:30:50

标签: 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.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}

1 个答案:

答案 0 :(得分:0)

尝试在user_id字段中添加索引。这将提高具有大量记录的集合的性能。