javascript - 我如何才能仅按 NodeJS 中 ISODate 字段上的日期进行分组

标签 javascript node.js mongodb mongoose

var reportSchema = new Schema({
    session_id: {type: Schema.Types.ObjectId, ref: 'Session'},
    learner_id: {type: Schema.Types.ObjectId, ref: 'User'},
    text: {type: String},
});

Report.aggregate(
                [
                    {$group: {
                            _id: '$created_at',
                        }},
                    {$sort: {"created_at": -1}},
                    {"$limit": 10}
                ],
                function(err, result) {
                    Ids = [];
                    for (var i in result)
                        Ids.push(result[i]._id);
                    ApiResponse.send(res, {success: true, data: result});
                }
        );

`

****我的代码输出是:****

{
success: true
data: [6]
0:  {
_id: "2015-04-14T11:54:20.517Z"
}-
1:  {
_id: "2015-04-01T11:54:15.802Z"
}-
2:  {
_id: "2015-04-01T11:54:29.941Z"
}-
3:  {
_id: "2015-05-14T11:52:28.811Z"
}-
4:  {
_id: "2015-04-02T12:54:46.903Z"
}-
5:  {
_id: "2015-04-01T11:52:22.642Z"
}-
-
message: ""
}

我想要这个:

{
    success: true
    data: [6]
    0:  {
    _id: "2015-04-01"
    }-
     1:  {
    _id: "2015-04-02"
    }-
   2:  {
    _id: "2015-04-14"
    }-
    -
    message: ""
    }

我正在创建日期 isoDate 上进行分组,并且我想仅根据日期而不是日期和时间进行分组。

我的网址:- http://localhost:5000/api/learner/report

最佳答案

使用以下代码片段

Report.aggregate([ 
{ "$group": { 
    "_id":{ 
        "$concat": [
             { "$substr": [ { "$year": "$created_at" }, 0, 4 ] },
             '-',
             { "$cond": [
                 { "$lt": [ { "$month": "$created_at" }, 10 ] },
                 { "$concat": [
                     "0",
                     { "$substr": [ { "$month": "$created_at" }, 0, 2 ] },
                 ]},
                 { "$substr": [ { "$month": "$created_at" }, 0, 2 ] }
             ]},
             '-',
             { "$cond": [
                 { "$lt": [ { "$dayOfMonth": "$created_at" }, 10 ] },
                 { "$concat": [
                     "0",
                     { "$substr": [ { "$dayOfMonth": "$created_at" }, 0, 2 ] },
                 ]},
                 { "$substr": [ { "$dayOfMonth": "$created_at" }, 0, 2 ] }
             ]}
         ]
     },
     date: {$max: '$created_at'}, 
}},
{ "$sort":{ "date" :-1 }}

]);

//输出如下-

{
"result" : [ 
    {
        "_id" : "2015-02-27",
        "date" : ISODate("2015-02-27T21:46:06.080Z")
    }, 
    {
        "_id" : "2015-02-22",
        "date" : ISODate("2015-02-22T19:08:53.964Z")
    }, 
    {
        "_id" : "2015-02-21",
        "date" : ISODate("2015-02-21T12:57:16.887Z")
    }, 
],
"ok" : 1

}

谢谢

关于javascript - 我如何才能仅按 NodeJS 中 ISODate 字段上的日期进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29411526/

相关文章:

python - 使用 Python 有一种方法可以在 mongodb 中进行插入或更新时监听更改

如果不满足条件,JavaScript 将停止脚本

javascript - 如何使用应用程序和静态文件服务器解决 JavaScript 起源问题

javascript - JavaScript 是否通过引用传递?

node.js - 在 Node.js 中安装 Ionic 框架

javascript - 使用 vuejs 从 nodejs 下载 zip 文件

mongodb - 在 Mongo 2.6 和 Pymongo 2.7.1 上使用带有聚合查询的 maxTimeMS 参数

node.js - MongoDB '$unset'中的美元($)前缀字段 '$unset'无效存储错误

javascript - 在图像预览上创建按钮重置

javascript - 无法读取未定义的属性 'use_env_variable'