【问题标题】:Convert date string to ISO format issue mongodb将日期字符串转换为 ISO 格式问题 mongodb
【发布时间】:2019-04-30 22:06:16
【问题描述】:

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

我需要转换:

2018-11-03:10:47:31

收件人:

2018-11-03T10:47:31.000Z

员工收藏

{
    "_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);
});

【问题讨论】:

  • 你的 mongoDB 版本是多少?
  • 我使用的是 mongo 3.6
  • 问题是您的日期格式很奇怪,您可以使用$dateFromString 执行此操作,但其format 选项仅在mongoDB 4.0 及更高版本中可用。
  • 好的,然后简单地研究一下像$unwind 这样的事情,然后在$addFields 里面你会做像"employeeInfo.date": { $dateFromString: { dateString: "$employeeInfo.time", format: "%Y-%m-%d:%H:%M:%S" } } 这样的事情。我现在手头没有 4.0 来给你完整的查询。
  • 这个想法是使用$dateFromStringformat 选项,因为您的日期格式完全搞砸了,mongoDB 默认情况下无法识别它,也无法将其传递给new Date()

标签: arrays mongodb mongoose mongodb-query aggregation-framework


【解决方案1】:

由于您的日期格式非常奇怪2018-11-03:10:47:31,因此您无法使用 mongo 4.0 之前的版本轻松解析它。原因是在 4.0 中,format 选项被添加到 $dateFromString 函数中,它允许您指定要解析的随机日期格式。因此,正如您提到的,如果 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"
        }
      }
    }
  }

项目方法可能也需要事先使用unwind,因为它可能对您有一个数组为employeeInfo这一事实很挑剔

【讨论】:

猜你喜欢
  • 2015-04-27
  • 1970-01-01
  • 2018-06-09
  • 1970-01-01
  • 2013-08-21
  • 2016-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多