如何在 mongodb 中更新数据字段中的小时数

How to update hours in data field in mongodb

我有一套 mongo 文档,我需要 convert/update 以下值,例如 ("workedDate" : ISODate("2020-07-01T00:00:00Z"))

"workedDate" : ISODate("2020-07-01T20:03:04Z"),
"workedDate" : ISODate("2020-07-01T19:59:07Z"),
"workedDate" : ISODate("2020-06-30T14:00:00Z"),
"workedDate" : ISODate("2020-07-01T19:49:29Z")

我试过以下查询:

db.timeentrys.update(
  { },
  {    
    $set: {
      workedDate:{$dateFromParts:{
      year:{$year:"$workedDate"},
      month:{$month:"$workedDate"},
      day:{$dayOfMonth:"$workedDate"}
  }}
    }
  }
)

出现以下错误:

WriteResult({
        "nMatched" : 0,
        "nUpserted" : 0,
        "nModified" : 0,
        "writeError" : {
                "code" : 52,
                "errmsg" : "The dollar ($) prefixed field '$dateFromParts' in 'workedDate.$dateFromParts' is not valid for storage."
        }
})

$dateFromParts 是聚合表达式。如果您使用 MongoDB 4.2,则只能在更新中使用聚合表达式,并提供管道数组作为 update 的第二个参数而不是对象。

编辑

在这个使用中,只需将更新对象包裹在[]中使其成为一个数组:

db.timeentrys.update(
  { },
  [{$set: {
      workedDate:{$dateFromParts:{
          year:{$year:"$workedDate"},
          month:{$month:"$workedDate"},
          day:{$dayOfMonth:"$workedDate"}
      }}
  }}]
)