Javascript 风帆余烬
我和EmberJS和SailsJS一起工作。现在我被要求制作一个统计页面,并在SailsJS中处理过滤过程 我有一个部门模型和另一个请求模型,这些模型之间的关系是(请求属于部门)。由于某种原因,我的经理阻止我建立(很多)关系 现在我要做的是循环遍历所有部门并将它们存储在新对象中,在该循环中,我要使用Javascript 风帆余烬,javascript,ember.js,sails.js,sails-mongo,Javascript,Ember.js,Sails.js,Sails Mongo,我和EmberJS和SailsJS一起工作。现在我被要求制作一个统计页面,并在SailsJS中处理过滤过程 我有一个部门模型和另一个请求模型,这些模型之间的关系是(请求属于部门)。由于某种原因,我的经理阻止我建立(很多)关系 现在我要做的是循环遍历所有部门并将它们存储在新对象中,在该循环中,我要使用Request.count({where:{department:department.id}})遍历所有请求,并获取对象的departments数组中每个部门的请求数 我试着按照我解释的那样做,但问
Request.count({where:{department:department.id}})
遍历所有请求,并获取对象的departments数组中每个部门的请求数
我试着按照我解释的那样做,但问题是当我在请求循环中记录部门时,它会给出我想象的结果,但当我添加(.id)时,它会显示“未定义”
这是我的密码:
Department.find().then((departments) => {
report.departments = departments;
Request.count({ department : departments.id}).exec(function countMe(err, count) {
console.log(count);
})
})
PS:如果这个任务还有其他方法,请告诉我,我是个初学者。你的
部门中的对象。那么
回调是一个部门对象数组。要获取id,您需要执行类似于部门[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...
});
});
但我发现关于这是否适用于sails mongo的报告相互矛盾,因此将此作为“也许这会起作用”的建议。我假设请求中有一个与部门相关的ObjectId属性部门
快速解决方法是纠正以下问题:
- 第二行没有意义,因为没有使用报告
- 做
让departmentIds=u.map(departments,'id')
并在计数查询对象中使用DepartmentID
但是,您无论如何都要在初始查询中查找所有部门,我假设您无论如何都要计算所有请求。只有在查询对象限制返回的部门数量的情况下,首先查找部门才有意义
此外,如果您知道有问题的部门ID,则可能不需要查询它们。否则,您可能会使用投影只返回DepartmentID,而不是所有部门的所有属性
Request.find().groupBy('department').sum('count').exec(function (err, results){
console.log(results);
});