javascript - MongoDB - 如何按两个字段和字段的总和值分组?
问题描述
我有这样的数组 json 以及如何对itemId和不同的日期进行分组:
let data=[
{itemId:'001', tranDate:'2020/03/15', qty:10},
{itemId:'001', tranDate:'2020/03/15', qty:30},
{itemId:'002', tranDate:'2020/03/15', qty:20},
{itemId:'001', tranDate:'2020/03/16', qty:50},
]
我想要如下图所示的结果:
请帮助我。
解决方案
您可以使用 MongoDB 的聚合来执行此操作:
db.collection.aggregate([
/** group on itemId & tranDate & sum qty field values */
{
$group: { _id: { itemId: "$itemId", k: "$tranDate" }, v: { $sum: "$qty" } }
},
/** Push entire data into data field [{k :k...,v:v...},{k :k...,v:v...}] */
{
$project: {
_id: 0,
data: {
$arrayToObject: [
[
{ k: "$_id.k", v: "$v" },
{ k: "itemId", v: "$_id.itemId" }
]
]
}
}
},
/** Replace data as new root for each document */
{ $replaceRoot: { newRoot: "$data" } }
]);
测试: MongoDB-游乐场
参考 : $group , $project , $arrayToObject , $replaceRoot
推荐阅读
- java - 将现有字符串与 Environment.getExternalStorageDirectory().getPath() 进行比较的问题
- javascript - 为什么动画没有按预期工作?
- python - 将带有值的numpy数组转换为每行中每个观察值的频率数组
- angular - Angular 5 router.navigate 让我远离 Angular 应用程序
- javascript - 将课程添加到活动幻灯片
- c# - 使用 OCR 精确复制文本
- r - 无法运行语句:查询期间丢失与 MySQL 服务器的连接
- python - 从扭曲的图像中检索像素的原始坐标
- ios - 没有这样的文件或目录:'SwiftyJSON'
- caching - 如何刷新 AMP 缓存?