MongoDB 键入集合中文档的属性

MongoDB type a attribute of document in collection

我目前正在从事一个将定期数据保存到 MongoDB 数据库的项目。 在这个数据库中,我有几个元素,每个文档都包含日期。

有问题

文档包含错误的日期属性类型。 这是由于插入错误,所有文档都有字符串格式的日期。 我可以用 MongoDB Atlas 图形界面更新每个属性,但是这个解决方案太长了..

问题

我想知道 MongoDB 我们是否有更新集合中所有文档中属性类型的解决方案。

如果我没理解错的话,你可以试试这些:

db.collection.aggregate([
    { "$addFields": {
        "date": {
            "$toDate": "$date"
        }
    } }
])

db.collection.aggregate([
    { "$addFields": {
        "date": { 
            "$convert": { 
                "input": "$date", 
                "to": "date" 
            } 
        }
    } }
])

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

var bulkOps = [];
var cursor = db.collection.find({});

cursor.forEach(function (doc) {
  var newDate = new ISODate(doc.date);
  bulkOps.push(
    {
      "updateOne": {
        "filter": { "_id": doc._id },
        "update": { "$set": { "date": newDate } }
      }
    }
  );
});

if (bulkOps.length > 0) {
  db.collection.bulkWrite(bulkOps);
}

对于您的情况,最简单的解决方案是在具有聚合管道的更新中使用 $toDate

db.collection.update({},
[
  {
    "$addFields": {
      "date": {
        "$toDate": "$date"
      }
    }
  }
])

这里是Mongo playground供您参考。

如果需要配合其他日期格式,可以使用$dateFromString

db.collection.update({},
[
  {
    "$addFields": {
      "date": {
        "$dateFromString": {
          "dateString": "$date",
          "format": <your format here>
        }
      }
    }
  }
])

关于格式解析器,您可以参考this official documentation$dateFromString