0

我有一组 mongo 文档,我需要转换/更新以下值,例如 ("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."
        }
})
4

1 回答 1

1

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

编辑

在此使用中,只需将更新对象包装在其中[]以使其成为数组:

db.timeentrys.update(
  { },
  [{$set: {
      workedDate:{$dateFromParts:{
          year:{$year:"$workedDate"},
          month:{$month:"$workedDate"},
          day:{$dayOfMonth:"$workedDate"}
      }}
  }}]
)
于 2020-07-04T09:27:31.367 回答