mongodb - how to find and then aggregate

前端 未结 3 1367
忘了有多久
忘了有多久 2021-02-01 11:39

I have collection that contains documents with below schema. I want to filter/find all documents that contain the gender female and aggregate the sum of brainscore. I tried the

3条回答
  •  陌清茗
    陌清茗 (楼主)
    2021-02-01 12:29

    Here is an answer if the DOB numbers needs to be converted to Date then compared. If not, a number or Date such as 1970 will be incorrectly $gte to 19400801 (you can try):

    db['!all'].aggregate([
        {
            $addFields: {
                "_temp_DOB": {
                    $dateFromString: {
                        dateString: {$toString: {$toLong: "$DOB"}},
                        format: "%Y%m%d"
                    }
                }
            }   
        },
        {
            $match: {
                'GENDER': 'F', 
                '_temp_DOB': { $gte: new Date("1940-08-01"),  
                               $lte: new Date("2013-12-31") }
            }
        },
        {
            $group: {
                _id: "$GENDER", 
                totalscore: { $sum: "$BRAINSCORE" }
            }
        }
    ])
    

    Outputs:

    { "_id" : "F", "totalscore" : 109 }
    

提交回复
热议问题