在 MongoDB 中将字符串转换为日期
MongoDB 是一个越来越受欢迎的优秀平台。 在它提供的各种功能中,MongoDB 还允许您将数据从一种类型转换为另一种类型。
这似乎是一个复杂的功能,但执行起来非常简单。
如果您正在寻找一种将数据从字符串转换为日期的方法,那么您来对地方了。
创建字符串或日期数据类型
在深入研究转换的工作原理之前,有必要先解释一下字符串和日期是如何创建的。 理想情况下,用户最初选择他想要的数据类型。
但是,您可能希望稍后更改它。 无论如何,您可以通过以下几种方式最初创建具有日期格式的字段。
{
birth: new Date('Jun 23, 1912'),
}
因此,一般结构是字段名称后跟一个冒号,然后是数据类型。
在 MongoDB 中将字符串转换为日期
MongoDB 确实允许您将数据类型从字符串切换为日期。 它比您预期的要简单得多。
您需要做的就是添加几行额外的代码,然后就可以开始了。
使用 toDate 运算符
在众多方法中,toDate 运算符可能是使用最频繁的一种。 这是因为它很容易记住并且易于执行。
如果可能,此运算符会将值转换为日期。
但是,如果无法更改为此格式,它会返回错误。 同理,如果要转换的值为 null 或缺失,运算符将返回 null。
请务必注意,如果您的 MongoDB 版本低于 MongoDB 4.0,您可能无法使用此方法。 这是使用 MongoDB 的 toDate 运算符的简单方法。
db.collection.aggregate([
{ "$addFields": {
"created_at": {
"$toDate": "$created_at"
}
} }
])
此代码将更改以所需日期格式存储的字段。 如上所述,如果出现任何错误或数据丢失,运算符将返回错误或空值。
使用转换运算符
另一种可以将字符串转换为日期的方法是转换运算符。 这与 toDate 运算符的工作方式类似,只要您将值转换为日期格式即可。
convert
运算符不同,因为它用于许多转换。
它不限于从字符串到日期的转换。 因此,在使用转换运算符时,定义要将值转换成的数据类型是必要的。
这通常是在使用转换运算符之后使用 to 运算符完成的。 您可以参考下面的代码以更好地理解其使用。
db.collection.aggregate([
{ "$addFields": {
"created_at": {
"$convert": {
"input": "$created_at",
"to": "date"
}
}
} }
])
此代码与上面的 toDate 运算符执行的代码相同。 可以看到,在指定convert运算符之后,to运算符用于指定将值转换为日期格式。
请记住,此运算符仅适用于
MongoDB 4.0
和更新版本。
使用 dateFromString 运算符
如果您使用的是旧版本的 MongoDB,则始终可以使用 dateFromString
运算符来完成您的工作。 这适用于所有版本的 MongoDB 3.6 或更新版本,因此您可能需要更新才能使用此运算符。
dateFromString
运算符允许您将字符串转换为日期对象。 此外,它还有一些附加功能,例如用于指定日期格式和时区的选项。
这是使用此运算符的简单方法。
db.collection.aggregate([
{ "$addFields": {
"created_at": {
"$dateFromString": {
"dateString": "$created_at",
"format": "%m-%d-%Y"/* this option is only available in MongoDB 4.0. or newer versions*/
}
}
} }
])
此代码将允许您进行所需的转换。 此外,如果您拥有正确版本的 MongoDB,您甚至可以使用格式运算符更改日期格式。
使用 set 运算符
如果您更喜欢使用旧版本的 MongoDB,您仍然可以通过使用 set 运算符获得所需的结果。 这在 MongoDB 2.6 和 MongoDB 3.1 之间的所有 MongoDB 版本中都可用,包括两者。
请务必注意,此运算符不仅仅用于将字符串转换为日期。 因此,您必须包括一些手动流程才能完成工作。
您将必须使用 forEach()
方法或游标方法 next()
迭代 find()
方法返回的游标,以访问所需的内容。 您必须在此循环中将所需字段转换为 ISODATE 对象。
最后,您将更新集合运算符,以便可以更新字符串格式。 在下面的代码中,xyz 是包含字符串的字段,必须将其转换为日期格式。
var cursor = db.collection.find({"xyz": {"$exists": true, "$type": 2 }});
while (cursor.hasNext()) {
var doc = cursor.next();
db.collection.update(
{"_id" : doc._id},
{"$set" : {"xyz" : new ISODate(doc.xyz)}}
)
};
使用 ClockTime
在大多数情况下有效的另一种方法是使用 ClockTime。 这实质上是使用 ClockTime 集合和 find()
方法将字符串转换为日期格式。
下面的代码中显示了一个使用示例。
db.ClockTime.find().forEach(function(doc) {
doc.ClockInTime=new Date(doc.ClockInTime);
db.ClockTime.save(doc);
})
我们希望您现在可以找到一种在 MongoDB 上将字符串转换为适合您的日期的方法。
相关文章
在 MongoDB Shell 中列出所有数据库
发布时间:2023/05/11 浏览次数:180 分类:MongoDB
-
交互式 Mongo Shell 提供了多个用于获取数据的选项。 本文介绍了在 Mongo Shell 中列出数据库的几种不同方法。
MongoDB 中检查字段包含的字符串
发布时间:2023/05/11 浏览次数:1024 分类:MongoDB
-
这篇文章解决了如何在 MongoDB 中使用正则表达式来确定字段是否包含字符串。在 MongoDB 中使用正则表达式 正则表达式 (regex) 是定义搜索模式的文本字符串。
在 MongoDB 中 upsert 更新插入
发布时间:2023/05/11 浏览次数:214 分类:MongoDB
-
在 MongoDB 中,upsert 结合了更新和插入命令。 它可以在 update() 和 findAndModify() 操作中使用。MongoDB 中的 upsert 查询 upsert 采用单个布尔参数。
如何卸载 MongoDB
发布时间:2023/05/11 浏览次数:745 分类:MongoDB
-
要从您的计算机中卸载 MongoDB,您必须先删除 MongoDB 服务、数据库和日志文件。使用这篇 MongoDB 文章,您将能够从 Ubuntu Linux、Mac 和 Windows 卸载 MongoDB。 请务必保留数据备份,因为一旦卸载,便
在 MongoDB 中存储日期和时间
发布时间:2023/05/11 浏览次数:762 分类:MongoDB
-
本 MongoDB 教程解释了 Date() 对象是什么以及如何使用 Date() 方法对集合进行排序。 这也将帮助您找到在 MongoDB 中显示和存储日期/时间的最佳方法。
MongoDB 按 ID 查找
发布时间:2023/05/11 浏览次数:1856 分类:MongoDB
-
MongoDB 中的 find by Id() 函数用于获取与用户提供的 id 相匹配的文档。 如果找不到与指定 ID 匹配的文档,则返回空值。
检查 MongoDB 服务器是否正在运行
发布时间:2023/05/11 浏览次数:247 分类:MongoDB
-
这篇 MongoDB 教程将告诉您如何检查是否安装了 MongoDB 以及安装的 MongoDB 服务器的版本。 它在 Windows、UBUNTU 和 MAC 等不同的操作系统中实现。
MongoDB 中的分页
发布时间:2023/05/11 浏览次数:174 分类:MongoDB
-
这篇文章将介绍什么是 MongoDB 中的分页。 为什么在 MongoDB 中需要分页以及在 MongoDB 中完成分页的不同方法或方式是什么。
MongoDB 从查询开始
发布时间:2023/05/11 浏览次数:186 分类:MongoDB
-
在这篇 MongoDB 文章中,用户将学习如何使用 $regex 进行开始查询。 它为查询中的模式匹配字符串提供正则表达式功能。