【问题标题】:Update particular field in mongodb of all documents with reference to its current value参考其当前值更新所有文档的 mongodb 中的特定字段
【发布时间】:2019-02-27 01:25:06
【问题描述】:

在我的 mongodb 集合中,我将所有文档都存储为“MM-DD-YYYY”格式的“TimeStamp”字段,该格式存储为字符串。我想在所有文档中将退出的时间戳字段更新为“DD-MM-YYYY”格式。谁能帮我写一个查询。

例如我有如下文件

{
  "id" : "1",
  "TimeStamp" : "09-22-2018"
},
{
  "id" : "2",
  "TimeStamp" : "09-23-2018"
}

我想将它们更新为

{
  "id" : "1",
  "TimeStamp" : "22-09-2018"
},
{
  "id" : "2",
  "TimeStamp" : "23-09-2018"
}

【问题讨论】:

  • 你能发布样本集和你正在使用的版本
  • MongoDB 版本为 3.6.2。
  • @AnthonyWinzlet 更新了问题

标签: mongodb mongodb-query aggregation-framework


【解决方案1】:

你可以试试下面$out聚合

db.collection.aggregate([
  { "$addFields": {
    "TimeStamp": {
      "$dateToString": {
        "format": "%d-%m-%Y",
        "date": { "$dateFromString": { "dateString": "$TimeStamp", "format": "%m-%d-%Y" }}
      }
    }
  }},
  { "$out": "collection_name" }
])

【讨论】:

    【解决方案2】:

    您可以遍历所有文档并重新格式化时间戳,如下所示:

    function reformat(date) { 
      var parts = date.split('-'); 
      return parts[1]+'-'+parts[0]+'-'+parts[2]; 
    }
    
    db.collection.find({TimeStamp : {$exists: true}}).snapshot().forEach(
     function (doc) { 
       db.collection.update( 
         { _id: doc._id }, 
         { $set: { TimeStamp: reformat(doc.TimeStamp) }}
       ); 
     }
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-06
      • 1970-01-01
      • 2016-02-15
      • 1970-01-01
      • 2022-01-20
      • 2020-10-02
      • 2021-07-24
      相关资源
      最近更新 更多