const MongoDataTable = require('mongo-datatable');
const mongodb = require('mongodb');
const MongoClient = mongodb.MongoClient;
MongoClient.connect('mongodb://localhost/database', function(err, client) {
const db = client.db('database');
new MongoDataTable(db).get('collection', options, function(err, result) {
if (err) {
// handle the error
}
// result is required output
// send to client
res.json(result);
// or return a promise in your function
resolve(result);
});
});
5条答案
按热度按时间i5desfxk1#
如果你使用的数据表有大量的数据,你应该考虑使用服务器端处理功能。
服务器端对datatable的处理如下所述:https://datatables.net/manual/server-side
但是如果你懒得在你的服务器上实现它,你可以使用第三方,比如:
希望这能帮上忙。
rqenqsqc2#
解决客户端试图从服务器(和数据库)获取用户,然后将其呈现到数据表的方法是使用分页。这里有几种我见过的解决分页的方法,让我们假设你使用REST。
这样做的一种方法是让你的API以以下结尾:
这意味着,客户端将向服务器请求用户(使用默认排序),并跳过它找到的前100个结果并检索接下来的50个用户。
另一种方法是让你的API像这样(我真的不喜欢这种方法):
这意味着,客户端将传递它想要获取的页面以及每个页面有多少结果。这将导致服务器端计算,因为您需要从250-300个用户中获取用户。
你可以在网上阅读更多的分页。
话虽如此,您的下一个问题是从数据库中获取所需的用户。MongoDB有两个使用
skip
和limit
的函数,这就是我更喜欢第一个API的原因。您可以按以下方式执行查询:您可以阅读有关限制函数here和跳过函数here的更多信息
vptzau2j3#
你需要的第一件事是在你的mongo查询中添加skip和limit,就像下面的Model.find().skip(offset).limit(limit)
然后你要做的下一件事是在数据表中启用服务器端处理
如果你正在使用JavaScript数据表,那么这个小工具将为你工作http://jsfiddle.net/bababalcksheep/ntcwust8/
对于Angular 数据表
http://l-lin.github.io/angular-datatables/archives/#/serverSideProcessing
另一种方法,如果你想发送自己的参数
你将得到每页的长度和偏移量作为.withOption('ajax',fun...)部分的数据对象中的开始变量,从那里你可以将其作为参数传递到get请求中,例如:/route?offset=data.start&limit?data.length或者使用上面例子中的post请求
nuypyhwy4#
@mahesh加载页面时创建2个变量,让我们说skipVar=0,并限制用户点击下一个发送 *skipVar值键跳过
ruoxqz4g5#
我发现mongo-datatable模块非常容易使用。
为了从MongoDB中检索数据,它要求DataTables的sent-parameters应该是JSON对象的形式,这是express request的查询。
下面是伪代码。(作者here)
此模块有一些额外的选项(
showAlertOnError
,customQuery
和caseInsensitiveSearch
),这些选项是任何实际应用程序开发所必需的。