Node.js 日期字段为字符串的MongoDB更新文档

Node.js 日期字段为字符串的MongoDB更新文档,node.js,database,mongodb,aggregation-framework,Node.js,Database,Mongodb,Aggregation Framework,我有一个文档集合,其中有两个字符串格式的字段,如下例所示 {"starts_at": "2019-12-01T18:51:56", "ends_at": "2019-12-05T18:51:56"} {"starts_at": "2019-12-03T04:38:24", "ends_at": "2019-12-16T04:38:24"} 如果“开始时间”和“结束时间”之间的差异大于7,我想将“结束时间”字段再更新一天。预期的输出就像第二个文档“ends_at”被更改一样 {"starts_a

我有一个文档集合,其中有两个字符串格式的字段,如下例所示

{"starts_at": "2019-12-01T18:51:56", "ends_at": "2019-12-05T18:51:56"}
{"starts_at": "2019-12-03T04:38:24", "ends_at": "2019-12-16T04:38:24"}
如果“开始时间”和“结束时间”之间的差异大于7,我想将“结束时间”字段再更新一天。预期的输出就像第二个文档“ends_at”被更改一样

{"starts_at": "2019-12-01T18:51:56", "ends_at": "2019-12-05T18:51:56"}
{"starts_at": "2019-12-03T04:38:24", "ends_at": "2019-12-17T04:38:24"}
我尝试了下面的方法

首先,我使用命令创建了一个日期不同的新字段

db.myCollection.aggregate([{$addFields: {
DateDiff:{$trunc:{
$divide:[{
$subtract:[{$dateFromString:{dateString:"$ends_at"}},{$dateFromString:{ dateString: "$starts_at"}}]},
1000*60*60*24]}}
}}])
当我试图更新集合时,我无法找到新创建的字段。用于更新我使用的

db.myCollection.update({DateDiff:{ $gte:7}},
{$set:{"ends_at":{$add:[{$dateFromString:{dateString:"$ends_at"}},1*24*60*60*1000]}}})
如何通过在单个MongoDB命令中添加额外的1天来将“ends_at”字段更新为“String”数据类型本身

我想更新“ends_at”字段,如果 “开始位置”和“结束位置”之间的差值大于7

预期的输出就像第二个文档“ends_at”被更改一样

以下聚合查询将执行更新。日期运算符
$dateFromString
$dateToString
用于将字符串日期转换为日期字段,执行比较/算术,然后转换回字符串。注意,该查询适用于MongoDB 4.2版

db.test.updateMany(
  { },
  [
    { $set: { ends_at: {
                      $cond: [ { $gt: [
                                       { $subtract: [ 
                                              { $dateFromString: { dateString: "$ends_at" } }, 
                                               { $dateFromString: { dateString: "$starts_at" } } 
                                          ] 
                                        },
                                        { $multiply: [ 7, 86400000 ] }
                                   ] 
                                },
                                { $dateToString: { 
                                            date: { $add: [ { $dateFromString: { dateString: "$ends_at" } }, 86400000 ] },
                                            format: "%Y-%m-%dT%H:%M:%S" 
                                 } },
                                 "$ends_at" 
                        ]

    } } },
  ]
)