Arrays 将日期字符串转换为ISO格式发布mongodb

Arrays 将日期字符串转换为ISO格式发布mongodb,arrays,mongodb,mongoose,mongodb-query,aggregation-framework,Arrays,Mongodb,Mongoose,Mongodb Query,Aggregation Framework,我按员工姓名将两个表连接在一起。我让那部分工作。我目前的问题是,我需要日期和时间是ISO格式,并且我需要在聚合中这样做。我不知道怎么做 我需要转换: 2018-11-03:10:47:31 致: 员工集合 { "_id" : ObjectId("(Object ID here"), "name": "Test" } { "_id" : ObjectId("(Object ID here"), "employeeName": "Test", "time"

我按员工姓名将两个表连接在一起。我让那部分工作。我目前的问题是,我需要日期和时间是ISO格式,并且我需要在聚合中这样做。我不知道怎么做

我需要转换:

2018-11-03:10:47:31
致:

员工集合

{
    "_id" : ObjectId("(Object ID here"),
    "name": "Test"
}
{
    "_id" : ObjectId("(Object ID here"),
    "employeeName": "Test",
    "time": "2014-11-21:17:15:00"
}
时钟采集

{
    "_id" : ObjectId("(Object ID here"),
    "name": "Test"
}
{
    "_id" : ObjectId("(Object ID here"),
    "employeeName": "Test",
    "time": "2014-11-21:17:15:00"
}
这是我的加入

dbo.collection("employee").aggregate([
{ "$lookup": {
    "localField": "name",
    "from": "clock",
    "foreignField": "clock.employeeName",
    "as": "employeeInfo"
}
}]).toArray(function(err, results) {
    console.log(results);
});

由于您的约会是以非常奇怪的格式进行的
2018-11-03:10:47:31
4.0版之前的mongo无法轻松解析它。原因是在4.0中,函数中添加了
格式
选项,允许您指定要解析的随机日期格式。因此,正如您提到的,如果4.0是一个选项,那么您将执行以下操作:

在展开
employeeInfo
后向聚合中添加字段:

$addFields: {
  "employeeInfo.date": {
    $dateFromString: {
      dateString: "$employeeInfo.time",
      format: "%Y-%m-%d:%H:%M:%S"
    }
  }
}
或者将其投影到项目管道中

{
    "$project": {
      "employeeInfo.time": {
        $dateFromString: {
          dateString: "$employeeInfo.time",
          format: "%Y-%m-%d:%H:%M:%S"
        }
      }
    }
  }

项目方法可能也需要事先进行
展开
,因为它可能会挑剔这样一个事实,即您有一个数组作为
employeeInfo

您的mongoDB版本是什么?我使用的是mongo 3.6。问题是您的日期格式很奇怪,您可以使用
$dateFromString
但它的
格式
选项仅在mongoDB 4.0及更高版本中可用。确定后,只需查看是否执行类似于
$unwind
的操作,然后执行类似于
$addFields
的操作,其中在内部执行类似于
“employeeInfo.date:{$dateFromString:{dateString:$employeeInfo.time”,格式:“%Y-%m-%d:%H:%m:%S”}
。我现在手头没有4.0来提供完整的查询。我的想法是使用
$dateFromString
格式
选项,因为您的日期格式完全混乱,mongoDB在默认情况下无法识别它,也无法在您将其传递给
新日期()时识别它。
您能在这方面提供帮助吗?