在NodeJS中使用Datatable和大量数据时search错误

我的数据库中有大约5,00,000条logging。 我正在使用DataTables构buildpipe理面板来pipe理logging。 我有Node.js作为MongoDB的后盾。

我已经使用这个库 – https://www.npmjs.com/package/datatables-query

到目前为止,在页面加载,我已经成功加载下面的图像中显示的结果。

在这里输入图像描述

每当我在search框中键入一些东西,我得到500错误,如截图所示。

在这里输入图像描述

这里可能是什么问题?

DataTable是显示具有大量数据的网格的一个很好的select,或考虑Node.js,Express和MongoDB的组合,有没有更好的select?

这是我的服务器端代码。

app.post('/getUsersData',function(req, res) { var Model = require('./models/user'), datatablesQuery = require('datatables-query'), params = req.body, query = datatablesQuery(Model); query.run(params).then(function (users) { var data = JSON.stringify(users); // var data = JSON.stringify(users); res.end(data); }, function (err) { res.status(500).json(err); }); }); 

我有一个名为用户有3列的MongoDB中的表

1)名称

2)电子邮件

3)密码

 $(document).ready(function() { var table = $('#datatable').DataTable({ // dom: 'Bfrtip', processing: true, serverSide: true, order: [[1, 'asc']], "aoColumnDefs": [ { "sClass": "hide_me", "aTargets": [ 0 ], visible: false } ], // first column in visible columns array gets class "hide_me" ajax: { url: "/getUsersData", type: 'POST', dataSrc: "data" }, columns: [ { data : "_id"}, { data : "name" }, { data : "email" }, { data : "password" }, ], responsive: true }); }); 

我可能会创build一个索引的数据和search索引,而不是search数据本身。 但是,如果您要创build全文索引,则需要closures集合中的所有列,而mongo 只允许每个集合有一个全文索引 。

至于替代scheme,你可以看看AWS的Elastic Search(对MongoDB工作正常)或Sphinx Index(基于PostreSQL)

编辑:我知道这个答案实际上没有丝毫回答这个问题,但我担心500错误不是应用程序中的内存问题,而是数据库(mongo不像SQL,所以不要devise你的应用程序就像你在SQL中那样)。

一些阅读材料,如果你打算改变数据库结构

http://rachbelaid.com/postgres-full-text-search-is-good-enough/
https://about.gitlab.com/2016/03/18/fast-search-using-postgresql-trigram-indexes/

这里的关键是弄清楚数据库或服务器端层究竟发生了什么问题。 您要警告的错误消息是来自datatables库的一条通用消息,该消息指向以下文档: https : //datatables.net/manual/tech-notes/7

链接到上面的文档说,这个错误将发生在任何时候从服务器返回非200响应。 在这种情况下,你显式地在数据表查询调用的error handling程序/callback中抛出了500错误,但是这并不会给你我们所需要的信息!

下一步是查看浏览器控制台的networking选项卡中的响应主体,因为您将错误序列化为json并将其与500响应一起发送,或者发送到console.log outerror handling程序/ callback中的err在你的节点代码中。 这将使您了解实际发生了什么问题,通过这些信息,我们可以更准确地规定解决scheme。 发布一个更新与任何你注销请!