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"
]
} } },
]
)