如何在$ group管道中使用$ dateToString Mongodb Aggregation?

时间:2016-11-16 18:50:56

标签: node.js mongodb

我正在使用Mongodb 3.0,我希望以特定格式使用Thu 10-Nov-2016,例如collection.aggregate([ { $group: { _id: { month: { $month: "$onDate" }, day: { $dayOfMonth: "$onDate" }, year: { $year: "$onDate" } }, totalSearch: { $sum: 1 } } }, { $limit: 10 }, { $sort: { '_id.year': -1,'_id.month': -1,'_id.day': -1 } }, //***Here i am want to use $dateToString with $project corresponding to $group._id****//// { $project: { $dateToString: { format: 'xxxxxxxx', date: xxxxxxxxx } } } ], function(err, dayWise) { if (err) cb(err); console.log('dayWises',dayWise); cb(null, dayWise); } ) 。这是我的代码

<script>
var toggle = true;

function imagesToggle(){
    var images = document.getElementsByTagName('img'); 
    if(toggle == true){
        for(var i = 0; i < images.length; i++) {
            images[i].style.display="none";
        }
        toggle = false;
    }
    else{
            for(var i = 0; i < images.length; i++) {
            images[i].style.display="block";
        }
        toggle = true;
    }
}
</script>

2 个答案:

答案 0 :(得分:1)

您可以在项目阶段添加$ concat,以便从组ID日期值中获取日期字符串,以格式化日期字符串。

{
    $project: {
        'value': {
            '$concat': [{
                    $substr: ["$_id.year", 0, -1]
                },
                "-", {
                    $substr: ["$_id.month", 0, -1]
                },
                "-", {
                    $substr: ["$_id.day", 0, -1]
                }
            ]
        }
    }
}

或者,您可以在组管道中应用$ dateToString以及其他值作为id。

{
    $group: {
        _id: {
            month: {
                $month: "$onDate"
            },
            day: {
                $dayOfMonth: "$onDate"
            },
            year: {
                $year: "$onDate"
            },
            formattedDateString: {
                $dateToString: {
                    format: "%Y-%m-%d",
                    date: '$onDate'
                }
            }
        },
        totalSearch: {
            $sum: 1
        }
}

答案 1 :(得分:0)

我认为你无法获得你指定的格式,而是你可以得到“2014-01-01”这种格式,首先你没有在你的小组阶段ISO中通过日期来使用dateTostring,检查这个

collection.aggregate([{
          $group: {
                   _id: { month: { $month: "$onDate" }, day: { $dayOfMonth: "$onDate" }, year: { $year: "$onDate" } },date : {"$first":"$onDate"}
                        totalSearch: { $sum: 1 }
                        },
                    },
                    { $limit: 10 },
                    { $sort: { '_id.year': -1,'_id.month': -1,'_id.day': -1 } },

        {$project:{$dateToString:{format:"%Y-%m-%d",date: $onDate}}


} 
                ],
                function(err, dayWise) {
                    if (err)
                        cb(err);
                    console.log('dayWises',dayWise);
                    cb(null, dayWise);
                })