mongodb聚合使用pipeline发生InvalidPipelineOperator。

想基于mongodb制作一个日志分析系统,单个文档如下所示:

{
    "_id" : ObjectId("5c6a14c4421aa97a4714b291"),
    "some":"data"
    "startTime" : ISODate("2019-02-18T02:13:24.244Z"),
    "endTime" : ISODate("2019-02-18T02:13:24.279Z")
}

由于startTime是毫秒级的时间,本人向基于秒级的时间进行group,所以写了如下代码进行转换:

db.apiMonitor.aggregate([
    {
        $project:{
            groupField:'$startTime'
        }
    },{
        $project:{
            groupField:{
                $dateToString:{
                    format:'%Y-%m-%d %H:%M:%S',
                    date:'$groupField'
                }
            }
        }
    },{
        $project:{
            groupField:{
                $dateFromString:{
                    format:'%Y-%m-%d %H:%M:%S',
                    dateString:'$groupField'
                }
            }
        }
    }
])

过程是通过$dateToString将ISODate转换成一个时间字符串去除毫秒的信息,然后通过$dateFromString重新转换会ISODate,但是运行出错,如下:

command failed: {
        "ok" : 0,
        "errmsg" : "Unrecognized expression '$dateFromString'",
        "code" : 168,
        "codeName" : "InvalidPipelineOperator"
}

能否解释一下是因为什么原因导致这个报错,或者有没有别的解决方案?

阅读 4.5k
2 个回答

mongodb的版本必须要3.6以上才能使用$dateFromString

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进