使用nodejs和mongoDB作为后端数据进行延迟加载

时间:2015-05-15 06:53:29

标签: node.js mongodb load lazy-evaluation

我们的馆藏有大约1亿份文件。我们在mongo查询中使用带有limit子句的nodejs和expressjs创建了一个简单的应用程序。对于现在的用户来说已经足够了。与此同时,我们尝试实现延迟加载,以便初始页面加载返回少量文档,当用户滚动时,我们希望加载更多文档。苦苦挣扎从哪里开始以及如何实现它。感谢您的建议。 我的index.js文件看起来像这样

router.get('/users', function(req, res) {
  var db = req.db; 
  var users = db.get('users'); 

  users.find(query, {limit: 10000}, function(e, docs){
    res.render('users', { 
      title: 'Users',
      'users': docs  
    });
  });
});

我想删除限制并使用skip尝试实现此目的。 请发表您的建议

3 个答案:

答案 0 :(得分:2)

This应该有所帮助。它使用.skip游标的.find()方法。我把它称为分页而不是延迟加载。

var itemsPerPage = 10;

router.get('/users/:pageNum', function(req, res) {
  var db = req.db; 
  var users = db.get('users'); 
  users.find(query, {skip: (itemsPerPage * (pageNum-1)), limit: itemsPerPage},function(e, docs){
    res.render('users', { 
      title: 'Users',
      'users': docs  
    });
  });
});

答案 1 :(得分:0)

您可以在路线中实施paging

如下所示;

// GET /users?start=20
router.get('/users', function(req, res) {
  var db = req.db; 

  var start = parseInt(req.query.start) || 0;
  var users = db.get('users'); 

  users.find(query, {start: start, limit: 10000}, function(e, docs){
    res.render('users', { 
      title: 'Users',
      'users': docs  
    });
  });
});

答案 2 :(得分:-2)

我建议您使用Mongoose有效地为MongoDB对象建模,然后使用许多可用的mongoose分页模块之一。