【问题标题】:Mongoose aggregate: Cant show the parameter on witch I group as I use replaceRootMongoose 聚合:当我使用 replaceRoot 时,无法在我组的女巫上显示参数
【发布时间】:2020-01-17 23:01:15
【问题描述】:

我有一个具有以下架构的数据集:

Schema({
    'ID': {type:Number},
    'Date': {type:Date},
    'DrivingHours':{type:Number}
})

我喜欢通过分组到以下结果来聚合:

[
    {
        "DrivingHours": [
            {
                "9": 2.6061111111111113,
                "36": 0,
                "54": 0.016944444444444446,
                "Date": "2019-9-1"
            },
            {
                "9": 0.5738888888888889,
                "36": 0,
                "54": 0,
                "Date": "2019-9-2"
            },
           ...

因为钥匙是我车辆的 ID。通过以下管道,我接近了我的目标,但无法整合“日期”。使用'$replaceRoot'后如何添加此参数有技巧吗?

{$facet: {
            DrivingHours: [
                {$group: {_id: {Date: '$Date', ID: '$ID'},
                    ID: {$first: '$ID'},
                    DrivingHours: {$first: '$DrivingHours'}
                }},                    
                {$group: {_id: '$_id.Date',
                    arrDrivingHours: {
                        $push: {'k': { $toString: '$ID' }, 'v':{ $ifNull: [ '$DrivingHours', 0 ] }}
                    }}},
                {'$replaceRoot':{
                    newRoot: {$arrayToObject:'$arrDrivingHours'} 
                    } 
                }
            ]
            }}

我正在使用 facet,因为我想稍后添加数据集的其他方面,但效果更好。

【问题讨论】:

  • 能否也附上on2 demo在这里mongoplayground.net你目前所做的事情,这样的问题很容易为别人解答。
  • 感谢@SaikatChakrabortty 在 playgrond.net 上的精彩提示。我只是用一些假数据建立了一个例子,在那里你可以看到我到目前为止已经意识到的:mongoplayground.net/p/ik4pdq9JF0P

标签: node.js express mongoose grouping aggregate


【解决方案1】:

我只需在“$mergeObjects”中添加日期对象。所以,解决办法是:

{$facet: {
            DrivingHours: [
                {$group: {_id: {Date: '$Date', ID: '$ID'},
                    ID: {$first: '$ID'},
                    DrivingHours: {$first: '$DrivingHours'}
                }},                    
                {$group: {_id: '$_id.Date',
                    arrDrivingHours: {
                        $push: {'k': { $toString: '$ID' }, 'v':{ $ifNull: [ '$DrivingHours', 0 ] }}
                    }}},
                {'$replaceRoot':{
                    newRoot: {"$mergeObjects": [
                        {"Date": "$_id.Date"},
                        {$arrayToObject: "$ObjDrivingHours"}
                        ]
                    } 
                } 
            }
        ]
    }
}

【讨论】:

猜你喜欢
  • 2016-10-20
  • 1970-01-01
  • 2020-03-22
  • 2019-12-02
  • 2021-06-16
  • 2021-06-15
  • 1970-01-01
  • 1970-01-01
  • 2018-04-04
相关资源
最近更新 更多