Arrays 将日期字符串转换为ISO格式发布mongodb
我按员工姓名将两个表连接在一起。我让那部分工作。我目前的问题是,我需要日期和时间是ISO格式,并且我需要在聚合中这样做。我不知道怎么做 我需要转换: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"
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在默认情况下无法识别它,也无法在您将其传递给新日期()时识别它。
您能在这方面提供帮助吗?