【问题标题】:JavaScript Ember with Sails带有 Sails 的 JavaScript Ember
【发布时间】:2017-11-05 09:41:14
【问题描述】:

我正在使用 EmberJS 和 SailsJS。现在我被要求制作一个统计页面并在 SailsJS 中处理过滤过程。

我有一个部门模型和另一个请求模型,这些模型之间的关系是(请求属于部门)。出于某种原因,我的经理阻止我建立(hasMany)关系。

现在我要做的是遍历所有部门并将它们存储在新对象中,在该循环内我想通过使用 Request.count({where : { department : department.id }}) 遍历所有请求并获取每个部门的请求数部门对象数组。

我试着按照我的解释去做,但问题是当我在请求循环中记录部门时,它给了我想象的结果,但是当我添加 (.id) 时,它显示我“未定义”。

这是我的代码:

Department.find().then((departments) => {
    report.departments = departments;
    Request.count({ department : departments.id}).exec(function countMe(err, count) {
       console.log(count);
    })
})

PS:如果有其他方法可以完成这项任务,请告诉我,我是初学者。

【问题讨论】:

    标签: javascript ember.js sails.js sails-mongo


    【解决方案1】:

    .then 回调中的 departments 对象是一个部门对象数组。要获得一个 id,您需要执行类似departments[0].id 的操作。

    我可能不建议使用.count,因为这意味着每个部门都要单独访问数据库。 Sails waterline 可能有一些方法可以让您计算按部门 id 分组的请求,但只是为了获得一个压路机工作示例,我将首先获取所有内容并在您的代码中进行一些处理:

    Department.find().then((departments) => {
        Request.find().then((requests) => {
            var requestCounts = {}; // we'll store the counts in this object
            for (var idx = 0; idx < requests.length; idx++) {
                if (!requestCounts[requests[idx].department]) {
                    requestCounts[requests[idx].department] = 0;
                }
                requestCounts[requests[idx].department]++;
            }
            // use requestCounts...
        });
    });
    

    创建这样一个单独的对象可能不是您想要做的,但这样的事情应该可以满足您的任何目的。请注意,我编写的代码不需要查找所有部门对象,但无论您做什么都可能会...

    如果您对效率感兴趣,那么一旦您完成这项工作,您就可以查看是否有某种方法可以查询数据库以直接获取您想要的计数,而不是这种代码内处理。但我会从这样简单的事情开始。


    编辑:

    听起来你可以使用类似的东西:

    Request.find().groupBy('department').sum('count').exec(function (err, results){
        console.log(results);
    });
    

    但我发现关于这是否适用于sails-mongo 的报告相互矛盾,因此将其视为“也许这会起作用”的建议。

    【讨论】:

      【解决方案2】:

      我假设 Request 有一个属性部门,它是一个与部门相关的 ObjectId。

      快速解决以下问题:

      • 第二行没有意义,因为没有使用报告
      • 让 departmentIds = _.map(departments, 'id');

      在count查询对象中使用departmentIds

      但是,无论如何,您都会在初始查询中找到所有部门,我假设您无论如何都要计算所有请求。只有在您有限制返回部门数量的查询对象时,首先查找部门才有意义。

      此外,如果您知道所涉及的部门 ID,则可能不需要查询它们。否则,您可能会使用投影来仅返回部门 ID,而不是所有部门的所有属性

      【讨论】:

        猜你喜欢
        • 2014-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多