node.js - Mongoose groupBy 多个值
问题描述
我正在努力与多个 groupBy 和猫鼬一起工作。
我的收藏看起来像这样
{
salesPersonName:"Tim",
zone:"1",
buyerName:"Jim's Shop",
cost:1000
},{
salesPersonName:"Tim",
zone:"1",
buyerName:"Jim's Shop",
cost:1000
},
{
salesPersonName:"Barb",
zone:"1",
buyerName:"Jim's Shop",
cost:3000
},
{
salesPersonName:"Tim",
zone:"2",
buyerName:"Petra's Shop",
cost:7000
}
我试图按每个销售人员按区域查找总成本。因此,对于每个有买家的区域,计算每个销售人员的总成本。
结果:
Zone buyerName salesPerson cost
1 Jim's Shop Tim 2000
Barb 3000
2 Petra's Shop Tim 7000
先感谢您
解决方案
假设您在 db 中的集合名为sales
,然后正确使用模式和模型:
const SaleSchema = new Schema({
salesPersonName:{
type: String
},
zone:{
type: String
},
buyerName:{
type: String
},
cost:{
type: Number
}
});
const Sale = mongoose.model('Sale', SaleSchema);
然后,您应该使用所有三个字段定义聚合正确的 aggreget key _id
,并cost
为总和添加新属性。聚合查询如下所示:
Sale.aggregate([{$group: {
_id:{
zone:"$zone",
buyerName:"$buyerName",
salesPersonName:"$salesPersonName"}
"cost":{$sum:"$cost"}}
},
{$sort: {"cost": 1}}]
);
当然,排序不是强制性的,结果的属性名称(salesPersonName、zone、...)可以有任何其他名称。另一方面请注意,$
我们正在定义属性的路径,$zone
表示集合的区域属性sales
等。
推荐阅读
- javascript - 访问数组对象属性
- bash - bash for 循环中的意外循环行为
- python - 当我本周没有行时,如何在我的数据框中填写周条目?
- java - Firebase 登录没有任何反应
- ruby - Git post-receive hook不使用rbenv指定的ruby版本
- firebase - Firebase 托管网址在删除后需要多长时间才能再次可用?
- python - Kivy 将数据从一个屏幕传递到另一个屏幕并直接传递到另一个类
- javascript - 使用引导程序将输入重点放在按钮单击上
- nvd3.js - 默认情况下取消选择nvd3图表上的线条时如何删除复选标记
- javascript - 如何将默认值设置为元素,用 Cleave.js 格式化?