在 MongoDB 中将时间戳转换为日期
本文演示了如何在 MongoDB 中将时间戳转换为日期。它还说明了如何计算特定日期的条目。
在 MongoDB 中将时间戳转换为日期
从 timestamp 转换为日期取决于我们保存时间戳的类型。它是对象、数字还是字符串类型?
我们可以在 mongo shell 上使用以下命令检查字段的类型。在本教程中,我们将学习如何将时间戳转换为数字、字符串或对象类型的日期。
检查字段类型:
// MongoDB 5.0.8
> typeof db.collection_name.findOne().fieldName;
当时间戳为数字类型时,将时间戳转换为日期
示例代码(用于 collection1
):
// MongoDB 5.0.8
> db.collection1.insertMany([
{"_id": 1, "datetime": new Date().getTime()}, //saves timestamp in milliseconds
{"_id": 2, "datetime": new Date().getTime()},
{"_id": 3, "datetime": new Date().getTime()},
{"_id": 4, "datetime": new Date().getTime()},
{"_id": 5, "datetime": new Date().getTime()}
]);
> db.collection1.find();
输出:
{ "_id" : 1, "datetime" : 1655448286502 }
{ "_id" : 2, "datetime" : 1655448286502 }
{ "_id" : 3, "datetime" : 1655448286502 }
{ "_id" : 4, "datetime" : 1655448286502 }
{ "_id" : 5, "datetime" : 1655448286502 }
检查 datetime
字段的类型:
// MongoDB 5.0.8
> typeof db.collection1.findOne().datetime;
输出:
number
一旦集合准备好并且我们知道字段类型,我们可以使用以下方法将时间戳转换为日期并计算每个日期的条目。
示例代码(用于 collection1
):
// MongoDB 5.0.8
> db.collection1.aggregate([
{
"$project": {
"_id": { "$toDate": "$datetime" }
}
},
{
"$group": {
"_id": { "$dateToString": { "format": "%Y-%m-%d", "date": "$_id" }},
"count": { "$sum": 1 }
}
}
]);
输出:
{ "_id" : "2022-06-17", "count" : 5 }
在这里,我们使用 $project
聚合阶段,它从指定集合中获取文档并告知字段的包含、_id
字段的抑制、新字段的添加以及重置现有字段的值。
在 $project
阶段,我们使用 $toDate
聚合将 datetime
字段的值转换为日期,并将其保存在 _id
字段中,该字段进一步传递给 $group
聚合阶段。
在这个阶段,我们使用 $dateToString
聚合管道运算符将指定的 date
对象按照指定的格式转换为字符串,并保存在 _id
字段中,进一步用于对文档进行分组。
$dateToString
采用 timestamp
、date
或 ObjectId
,根据用户指定的格式进行进一步转换,而 $sum
仅返回数值的总和。
最后,我们按项目对文档进行分组,这里是 _id
。请记住,_id
现在包含一个字符串值,因为我们根据用户指定的格式将指定的日期转换为字符串。
当时间戳为字符串类型时,将时间戳转换为日期
示例代码(用于 collection2
):
// MongoDB 5.0.8
> db.collection2.insertMany([
{"_id": 1, "datetime": "1655445247168"},
{"_id": 2, "datetime": "1522838153324"},
{"_id": 3, "datetime": "1513421466415"},
{"_id": 4, "datetime": "1515488183153"},
{"_id": 5, "datetime": "1521571234500"}
]);
> db.collection2.find();
输出:
{ "_id" : 1, "datetime" : "1655445247168" }
{ "_id" : 2, "datetime" : "1522838153324" }
{ "_id" : 3, "datetime" : "1513421466415" }
{ "_id" : 4, "datetime" : "1515488183153" }
{ "_id" : 5, "datetime" : "1521571234500" }
检查 datetime
字段的类型:
// MongoDB 5.0.8
> typeof db.collection2.findOne().datetime;
输出:
string
在这个集合中,我们有字符串格式的时间戳。因此,我们可以使用以下解决方案将其从时间戳转换为日期,并按日期对它们进行分组。
示例代码(用于 collection2
):
// MongoDB 5.0.8
> db.collection2.aggregate([
{
"$project": {
"_id": { "$toDate": { "$toLong": "$datetime" }}
}
},
{
"$group": {
"_id": { "$dateToString": { "format": "%Y-%m-%d", "date": "$_id" } },
"count": { "$sum": 1 }
}
}
]);
输出:
{ "_id" : "2018-03-20", "count" : 1 }
{ "_id" : "2017-12-16", "count" : 1 }
{ "_id" : "2022-06-17", "count" : 1 }
{ "_id" : "2018-04-04", "count" : 1 }
{ "_id" : "2018-01-09", "count" : 1 }
此代码与前面的示例相同,但有一点不同。在这里,我们首先使用 $toLong
将 datetime
字段从字符串类型转换为数字类型,然后使用转换后的值使用 $toDate
转换为日期。
当时间戳为对象类型时,将时间戳转换为日期
示例代码(用于 collection3
):
// MongoDB 5.0.8
> db.collection3.insertMany([
{"_id":1, "datetime": new Timestamp()},
{"_id":2, "datetime": new Timestamp()},
{"_id":3, "datetime": new Timestamp()},
{"_id":4, "datetime": new Timestamp()},
{"_id":5, "datetime": new Timestamp()}
]);
> db.collection3.find();
输出:
{ "_id" : 1, "datetime" : Timestamp(1655448393, 1) }
{ "_id" : 2, "datetime" : Timestamp(1655448393, 2) }
{ "_id" : 3, "datetime" : Timestamp(1655448393, 3) }
{ "_id" : 4, "datetime" : Timestamp(1655448393, 4) }
{ "_id" : 5, "datetime" : Timestamp(1655448393, 5) }
检查 datetime
字段的类型:
// MongoDB 5.0.8
> typeof db.collection3.findOne().datetime;
输出:
object
这次我们可以使用以下解决方案将时间戳转换为日期并计算每个日期的条目。
示例代码(用于 collection3
):
// MongoDB 5.0.8
> db.collection3.aggregate([
{
"$project": { "_id": "$datetime" }
},
{
"$group": {
"_id": { "$dateToString": { "format": "%Y-%m-%d", "date": "$_id" } },
"count": { "$sum": 1 }
}
}
]);
输出:
{ "_id" : "2022-06-17", "count" : 5 }
相关文章
比较 MongoDB 中的字段
发布时间:2023/04/21 浏览次数:51 分类:MongoDB
-
在本文中,我们将了解如何比较 MongoDB 中的两个字段。 此外,我们将看到一个相关的示例和解释,以使主题更容易理解。
清除或删除 MongoDB 中的集合
发布时间:2023/04/21 浏览次数:147 分类:MongoDB
-
本篇文章将告诉大家如何删除 MongoDB 数据库中的集合以及删除 MongoDB 中的集合的不同方法。
向 MongoDB 集合中的每个文档添加新字段
发布时间:2023/04/21 浏览次数:107 分类:MongoDB
-
您将在这篇文章中了解 $set 和 $setOnInsert 操作。 此外,利用这两个运算符,快速描述了向 MongoDB 中的集合添加字段的挑战。
MongoDB 截断集合
发布时间:2023/04/21 浏览次数:178 分类:MongoDB
-
可以根据需要选择两个选项之一来截断下面的集合。 在今天的文章中,我们将学习如何在 MongoDB 中截断集合。
删除 MongoDB 中的重复项
发布时间:2023/04/21 浏览次数:151 分类:MongoDB
-
在本文中,我们将了解如何删除 MongoDB 中的重复条目,并且我们还将看到一个带有适当解释的示例,以使主题更容易理解。
使用 NodeJS 检查 MongoDB 中是否存在集合
发布时间:2023/04/21 浏览次数:194 分类:MongoDB
-
在本文中,我们将检查 MongoDB 数据库中是否存在一个集合,并且我们还将查看与主题相关的示例,以使主题更容易理解。 为此,我们将使用 Node.js。
MongoDB 中的唯一索引
发布时间:2023/04/21 浏览次数:144 分类:MongoDB
-
在这篇教学文章中,您将了解唯一索引、它们是什么以及如何在 MongoDB 中使索引唯一。 此外,还简要详细地解释了使用户的电子邮件在 MongoDB 中唯一。
在 MongoDB 中创建索引
发布时间:2023/04/21 浏览次数:104 分类:MongoDB
-
索引有助于有效解决查询。 如果没有索引,MongoDB 必须遍历集合中的每个文档才能找到与查询匹配的文档。因此,在今天的文章中,我们将学习如何在 MongoDB 中创建索引。
MongoDB 中的稀疏索引
发布时间:2023/04/21 浏览次数:142 分类:MongoDB
-
在本文中,我们将讨论 MongoDB 中的稀疏索引。 此外,我们将提供一个相关示例并进行解释,以使该主题更容易理解。