如何最大限度地缩短从数据库

时间:2018-03-26 07:30:15

标签: node.js mongodb pagination

我需要从mongodb获取1000条记录,如何在节点js中执行此操作? 我已经尝试通过将限制发送到1000来使用分页甚至认为返回响应需要25秒,那么还有其他方法可以最小化响应时间吗?

exports.getAll = function(filters, sort, skip, limit, callback) {

   let query = {
       removed: false
   };
   let filter = {};
   let options = {
       sort: []
   };


   req.skip = 0;
   options.limit = 10000
   options.sort = [
       ['_id', 'desc']
   ];

   collections.findItems(query, filter, options, (err, result) => {

       if (err) {
           logger.error('db error', err);
           return callback('Something went wrong');
       }

       callback(null,result);

   });

};

exports.getAll = function getAll(req, res, next) {

   service.getAll(req.body.filters, req.body.sort, req.body.skip, req.body.limit, (err, data) => {

       if (err) {
           return next({
               status: 400,
               error: err
           });
       }

       res.json(data);

   });

};

2 个答案:

答案 0 :(得分:1)

我猜您在find方法中使用了mongoose findItemsfind()返回包含大量内容的mongoose文档。

您可以使用find().lean()

使用lean(),将返回来自mongodb的简单普通javascript对象数据。它会大大优化响应时间。

但我也建议您阅读此内容,以便在mongodb级别进行更多查询优化:https://docs.mongodb.com/manual/core/query-optimization/

答案 1 :(得分:0)

您使用的是ORM吗?像sequelize?

你的文件结构是什么?

检查您的mongdb日志:

tail -f /var/log/mongodb/mongod.log 

如果您的文档是直接的,那么您应该使用索引。

如果您有索引,请尝试重建它们。

应用索引时,排序有效。如果可以,请避免在服务器上排序,在客户端排序数据。

  

因为数据库对排序操作施加了32MB的内存限制