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
。
我目前正在从事一个将定期数据保存到 MongoDB 数据库的项目。 在这个数据库中,我有几个元素,每个文档都包含日期。
有问题
文档包含错误的日期属性类型。
问题
我想知道 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
。