如何查询Mongoosejs中的大型数据集

时间:2016-05-30 18:09:34

标签: node.js mongodb mongoose mongodb-query

我正在尝试使用特定属性查询大量用户(向我提供已注册到服务的所有用户)。该数字预计> 10,000。但每个用户对象都很庞大。在下面的函数中,我能够将'到达此处'记录到cmd行,显示该函数至少被调用,但是我无法访问allUsers,字符串'所有用户长度'甚至没有记录到cmd行。我的猜测可能是mongoose对大量数据有读取超时。用户是猫鼬收藏品。如果有人知道会发生什么事情或有更好的方法来查询大量数据,欢迎所有建议。感谢

function get_userIds_ready_for_fulfillment(Users) {
  logger.info('reached here');
  Users.find({ "isEnrolled": true }, (error, allUsers) => {
    if (error) {
      return logger.error('Fullfiment_job_Error', 'error querying all users');
    }
    logger.info('all users length', allUsers.length);
 });
}

1 个答案:

答案 0 :(得分:2)

你可以考虑

  • 使用投影来限制返回的字段,从而缩小结果集。一种方法是:Users.find({"isEnrolled": true}).select({myField: 1}).exec((err, allUsers) => { ... })Docs
  • 使用流/游标。例如,可以直接将结果集流式传输到node.js中的客户端。 Docs
  • 使用skiplimit分析数据。跳过是数据库中的一项昂贵的操作(讨论here)但是比现在更好。如果在您进行分页时插入了某些内容,这种方法也可以省略数据。
  • 使用任何聚合运算符。 Docs。 (count也是该部分未列出的聚合运算符。)