在mongodb中将日期从字符串格式转换为日期格式
我的生日是这样的字符串格式的“2010-03-22”。我想在MongoDB中转换为日期类型 我应该编写什么db.patient.update()函数? 我想计算每个人的年龄 我使用了解决方案,但所有日期都转换为“1970-01-01T00:00:00.000Z”在mongodb中将日期从字符串格式转换为日期格式,mongodb,Mongodb,我的生日是这样的字符串格式的“2010-03-22”。我想在MongoDB中转换为日期类型 我应该编写什么db.patient.update()函数? 我想计算每个人的年龄 我使用了解决方案,但所有日期都转换为“1970-01-01T00:00:00.000Z” 如果您使用的是robomonogo,请使用新的ISODate而不是新的日期将字段转换为正确的日期对象时,您可以采用的一种方法是拆分给定分隔符上的字符串“-”。使用将带分隔符的字符串转换为数字,构造函数将从这些部分构建一个:第一部分是年,
如果您使用的是robomonogo,请使用新的ISODate而不是新的日期将字段转换为正确的日期对象时,您可以采用的一种方法是拆分给定分隔符上的字符串
“-”
。使用将带分隔符的字符串转换为数字,构造函数将从这些部分构建一个:第一部分是年,第二部分是月,最后一部分是天。由于使用基于零的月数,因此必须从月数中减去一
以下内容说明了这种方法:
var cursor = db.patient.find({"birthDate": {"$exists": true, "$type": 2 }});
while (cursor.hasNext()) {
var doc = cursor.next();
var parts = doc.birthDate.split("-");
var dt = new Date(
parseInt(parts[0], 10), // year
parseInt(parts[1], 10) - 1, // month
parseInt(parts[2], 10) // day
);
db.patient.update(
{"_id": doc._id},
{"$set": {"birthDate": dt}}
)
};
为了提高性能,特别是在处理大型集合时,请利用进行批量更新,因为您将以500次为单位将操作批量发送到服务器,这将为您提供更好的性能,因为您不是每500次请求中就向服务器发送一次请求 下面演示了这种方法,第一个示例使用MongoDB版本
=2.6和<3.2
中提供的批量API。它更新了所有内容
通过将OrderDate
字段更改为日期字段,可以删除集合中的文档:
var bulk = db.patient.initializeUnorderedBulkOp(),
counter = 0;
db.patient.find({"birthDate": {"$exists": true, "$type": 2 }}).forEach(function (doc) {
var parts = doc.birthDate.split("-");
var dt = new Date(
parseInt(parts[0], 10), // year
parseInt(parts[1], 10) - 1, // month
parseInt(parts[2], 10) // day
);
bulk.find({ "_id": doc._id }).updateOne({
"$set": { "birthDate": dt}
});
counter++;
if (counter % 500 == 0) {
bulk.execute(); // Execute per 500 operations and re-initialize every 500 update statements
bulk = db.patient.initializeUnorderedBulkOp();
}
})
// Clean up remaining operations in queue
if (counter % 500 != 0) { bulk.execute(); }
下一个示例适用于新的MongoDB版本
3.2
,该版本自发布以来一直,并使用提供了一组更新的API:
var bulkOps = db.patient.find({"birthDate": {"$exists": true, "$type": 2 }}).map(function (doc) {
var parts = doc.birthDate.split("-");
var dt = new Date(
parseInt(parts[0], 10), // year
parseInt(parts[1], 10) - 1, // month
parseInt(parts[2], 10) // day
);
return {
"updateOne": {
"filter": { "_id": doc._id } ,
"update": { "$set": { "birthDate": dt } }
}
};
})
db.patient.bulkWrite(bulkOps);
您将使用哪种客户端?c#,java javascript?->可以在需要时指向客户端代码
var bulkOps = db.patient.find({"birthDate": {"$exists": true, "$type": 2 }}).map(function (doc) {
var parts = doc.birthDate.split("-");
var dt = new Date(
parseInt(parts[0], 10), // year
parseInt(parts[1], 10) - 1, // month
parseInt(parts[2], 10) // day
);
return {
"updateOne": {
"filter": { "_id": doc._id } ,
"update": { "$set": { "birthDate": dt } }
}
};
})
db.patient.bulkWrite(bulkOps);