【问题标题】:Correct way to return from mongo to datatable从 mongo 返回数据表的正确方法
【发布时间】:2015-05-31 18:15:16
【问题描述】:

我正在使用猫鼬并从集合中返回要使用数据表显示的文档。我有一些问题。客户端代码是

    var table = $('#dataTables-example').DataTable( {
          "bProcessing" : true,
          "bServerSide" : true,
          "ajax" : {
            "url" : "/mongo/get/datatable",
            "dataSrc": ""
          },
          "columnDefs": [
            {
              "data": null,
              "defaultContent": "<button id='removeProduct'>Remove</button>",
              "targets": -1
            }
          ],
          "aoColumns" : [
            { "mData" : "name" },
            { "mData" : "price" },
            { "mData" : "category" },
            { "mData" : "description" },
            { "mData" : "image" },
            { "mData" : "promoted" },
            { "mData" : null}
          ]
        });

然后使用以下方法在服务器端进行处理

 db.once('open', function callback ()
    {
       debug('Connection has successfully opened');

       productSchema = mongoose.Schema({
          name: String,
          price: String,
          category: String,
          description: String,
          image: String,
          promoted: Boolean
       });

       Product = mongoose.model('Product', productSchema, 'products');
    });

    exports.getDataForDataTable = function (request, response) {
       Product.dataTable(request.query, function (err, data) {
      debug(data);
      response.send(data);
   });
};

如果我使用上面的代码,数据表无法显示文档,声称 没有找到匹配的记录 但是它确实正确显示了文档的数量 显示 1到 2 个条目中的 2 个。如果我将服务器端代码更改为使用data.data 而不是data 进行响应,则文档会正确填充在表中不再找到记录数,而是说显示0 到 0 个条目(从 NaN 总条目中过滤)

exports.getDataForDataTable = function (request, response) {
           Product.dataTable(request.query, function (err, data) {
          debug(data);
          response.send(data.data);
       });

查询mongo时实际返回的data

{ draw: '1', recordsTotal: 2, recordsFiltered: 2, data: [ { _id: 5515274643e0bf403be58fd1, name: 'camera', price: '2500', category: 'electronics', description: 'lovely', image: 'some image', promoted: true }, { _id: 551541c2e710d65547c6db15, name: 'computer', price: '10000', category: 'electronics', description: 'nice', image: 'iamge', promoted: true } ] }

【问题讨论】:

    标签: mongodb datatable mongoose


    【解决方案1】:

    您是否尝试删除 DataTable 配置中的 dataSrc 字段:

    "ajax" : {
        "url" : "/mongo/get/datatable",
    },
    

    【讨论】:

    • 如果你知道dataSrc有问题,那就说出来。如果您不确定,请在建议之前自己尝试一下。如果您只是猜测,请作为对问题的评论发布,而不是作为答案。
    【解决方案2】:

    mongoose.model中的第三个参数设置了集合名称,该集合名称自动复数和小写,因此在这种情况下不起作用。

    假设您的 Product 变量已在早期声明并为全局变量,请尝试以下操作:

    products = mongoose.model('products', productSchema); Product = require('mongoose').model('products');

    【讨论】:

    • 我不确定我是否遵循。尝试而不是什么?您认为这会产生什么影响?
    • 它是从github.com/lepazmino/mongoose-datatable-demo/blob/master/… 的官方示例中偷来的指定 bson/json。
    • 一般来说,将模型保存在模型文件夹中,在那里启动插件并导出模型是一种更好的软件架构模式,而不是在 db.once 中定义模式。
    • 不幸的是,这仍然无法为我解决问题
    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 2019-12-30
    • 2013-11-23
    • 1970-01-01
    • 2017-06-17
    • 1970-01-01
    • 2012-08-07
    • 2012-11-03
    相关资源
    最近更新 更多