使用 nodejs 和 mongoDB 作为后端数据进行延迟加载
Lazy loading using nodejs and mongoDB as backend data
我们的 collection 有大约 1 亿份文件。我们使用 nodejs 和 expressjs 创建了一个简单的应用程序,并在 mongo 查询中使用了 limit 子句。对于现在的用户来说已经足够了。与此同时,我们正在尝试实现延迟加载,以便初始页面加载 returns 几个文档,当用户滚动时,我们希望加载更多文档。挣扎着从哪里开始以及如何提前实施它。感谢您的建议。
我的 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 尝试实现此目的。
请post您的建议
我建议您使用 Mongoose 高效地建模 MongoDB 对象,然后使用许多可用的 Mongoose 分页模块之一。
您可以在您的路线中实施 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
});
});
});
This 应该有帮助。它使用 .find()
游标的 .skip
方法。我称之为分页而不是延迟加载。
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
});
});
});
我们的 collection 有大约 1 亿份文件。我们使用 nodejs 和 expressjs 创建了一个简单的应用程序,并在 mongo 查询中使用了 limit 子句。对于现在的用户来说已经足够了。与此同时,我们正在尝试实现延迟加载,以便初始页面加载 returns 几个文档,当用户滚动时,我们希望加载更多文档。挣扎着从哪里开始以及如何提前实施它。感谢您的建议。 我的 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 尝试实现此目的。 请post您的建议
我建议您使用 Mongoose 高效地建模 MongoDB 对象,然后使用许多可用的 Mongoose 分页模块之一。
您可以在您的路线中实施 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
});
});
});
This 应该有帮助。它使用 .find()
游标的 .skip
方法。我称之为分页而不是延迟加载。
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
});
});
});