在 MongoDB 中按日期对集合进行排序
在本 MongoDB 教程中,讨论了在 MongoDB 中对集合进行排序的问题。 简要说明了对数据库中的集合进行排序的不同方法。
在 MongoDB 中使用 sort() 函数
使用 MongoDB 中的 sort()
函数和 $sort 聚合解决了这个问题。 您可以使用此工具按升序或降序对数据进行排序。
例子:
db.posts.find().pretty()
{
"_id" : 1,
"title" : "MongoDB",
"body" : "MongoDB is an open-source database",
"date" : "2021-01-01T00:00:00.000Z",
"Country" : "United Kingdom"
}
{
"_id" : 2,
"title" : "MySQL",
"body" : "MySQL is a popular open-source relational database management system",
"date" : ISODate("2020-01-01T00:00:00Z"),
"Country" : "United States of America"
}
{
"_id" : 3,
"title" : "SQL",
"body" : "SQL is a database computer language",
"date" : ISODate("2021-01-01T00:00:00Z"),
"Country" : "New Zealand"
}
一些数据被添加到 posts 集合中,日期字段用于将它们按升序排列,较早的日期在前。
db.posts.find().sort({ date: 1 }).pretty()
{
"_id" : 1,
"title" : "MongoDB",
"body" : "MongoDB is an open-source database",
"date" : "2021-01-01T00:00:00.000Z",
"Country" : "United Kingdom"
}
{
"_id" : 2,
"title" : "MySQL",
"body" : "MySQL is a popular open-source relational database management system",
"date" : ISODate("2020-01-01T00:00:00Z"),
"Country" : "United States of America"
}
{
"_id" : 3,
"title" : "SQL",
"body" : "SQL is a database computer language",
"date" : ISODate("2021-01-01T00:00:00Z"),
"Country" : "New Zealand"
}
排序后,第一个文档有一个日期字符串而不是日期对象。 日期字符串首先出现,即使文档 2 中的日期更晚。
在 MongoDB 中按日期(升序或降序)排序
要在 MongoDB 中按降序对日期进行排序,请使用 sort() 函数并提供日期字段名称和方向(升序或降序)等参数。
语法:
sort(date : 1) #For ascending order
sort(date : -1) #For descending order
示例:
db.product.find().pretty()
{
"_id" : 1,
"item" : {
"name" : "HighLander",
"type" : "toyota"
},
"price" : 2.8
"date" : "2021-01-01T00:00:00.000Z"
}
{
"_id" : 2,
"item" : {
"name" : "Swift",
"type" : "suzuki"
},
"price" : 3.9
"date" : ISODate("2020-01-01T00:00:00Z")
}
{
"_id" : 3,
"item" : {
"name" : "Mirage G4",
"type" : "mitsubishi"
},
"price" : 3.2
"date" : ISODate("2021-01-01T00:00:00Z")
}
这些是已插入产品数据库的文档。 现在,它将按降序排列。
查询:
db.product.find().sort(date:-1).pretty()
{
"_id" : 3,
"item" : {
"name" : "Mirage G4",
"type" : "mitsubishi"
},
"price" : 3.2
"date" : ISODate("2021-01-01T00:00:00Z")
}
{
"_id" : 2,
"item" : {
"name" : "Swift",
"type" : "suzuki"
},
"price" : 3.9
"date" : ISODate("2020-01-01T00:00:00Z")
}
{
"_id" : 1,
"item" : {
"name" : "HighLander",
"type" : "toyota"
},
"price" : 2.8
"date" : "2021-01-01T00:00:00.000Z"
}
在 MongoDB 中按日期字符串排序
MongoDB 中有两种替代技术用于存储日期/时间。 在第一个方法中使用日期对象来存储文档中的日期。
句法:
new Date();
查询:
db.product.insertOne({ "productId" : 101, "productDeliveryDateTime": new Date() });
{
"acknowledged" : true,
"insertedId" : ObjectId("611c9e39e1fdc428cf238757")
}
product 是集合名称,Date()
对象用于插入日期字段。
要将日期列存储在数据库中,您必须在第二种方法中使用 ISODate()。 国际标准化组织(ISO)是一个致力于制定国际标准的非营利组织。
语法:
new ISODate();
查询:
db.product.insertOne({ "productId" : 102, "productDeliveryDateTime": new ISODate() });
{
"acknowledged" : true,
"insertedId" : ObjectId("611c9e39e1fdc428cf238758")
}
此处,日期字段使用 ISODate() 插入到产品集合中。 您可以使用 find() 方法显示所有文档:
db.product.find().pretty()
{
"_id" : ObjectId("611c9e39e1fdc428cf238757"),
"productId" : 101,
"productDeliveryDateTime" : ISODate("2021-08-18T05:44:25.081Z")
}
{
"_id" : ObjectId("611ca108e1fdc428cf238758"),
"productId" : 102,
"productDeliveryDateTime" : ISODate("2021-08-18T05:56:24.144Z")
}
保存日期/时间最方便的方法是使用 Date 对象。
如果文档同时具有 Date()
字符串方法和 ISODate() 方法,MongoDB 将按照 Date() 字符串方法的方向(升序或降序)对其进行排序。 值得注意的是,排序后,显示的第一个文档是日期字符串而不是 Date 对象。
它首先出现,即使它的日期晚于文档 2 中的日期。
查询:
db.language.find().pretty()
{
"_id" : 1,
"item" : {
"name" : "Python",
"type" : "Very high level dynamic data types"
},
"price" : 2.8,
"date" : "2021-01-10T00:00:00.000Z"
}
{
"_id" : 2,
"item" : {
"name" : "C++",
"type" : "High-level computer programming language"
},
"price" : 3.9,
"date" : ISODate("2020-12-01T00:00:00Z")
}
{
"_id" : 3,
"item" : {
"name" : "Java",
"type" : "Java is a high-level, class-based, object-oriented programming language"
},
"price" : 3.2,
"date" : ISODate("2021-08-01T00:00:00Z")
}
这些是添加到语言集合中的一些文档。 您也可以使用 sort() 函数对它们进行排序。
查询:
db.language.find().sort(date:1).pretty()
{
"_id" : 1,
"item" : {
"name" : "Python",
"type" : "Very high level dynamic data types"
},
"price" : 2.8,
"date" : "2021-01-10T00:00:00.000Z"
}
{
"_id" : 3,
"item" : {
"name" : "Java",
"type" : "Java is a high-level, class-based, object-oriented programming language"
},
"price" : 3.2,
"date" : ISODate("2021-08-01T00:00:00Z")
}
{
"_id" : 2,
"item" : {
"name" : "C++",
"type" : "High-level computer programming language"
},
"price" : 3.9,
"date" : ISODate("2020-12-01T00:00:00Z")
}
将所有数据按升序排列后,您可以使用日期字段进行观察。 第一个字段是日期字符串字段。 保存日期/时间最直接的方法是使用 Date 对象。
MongoDB 无法运行的原因可能有多种,但您必须记住一些在 MongoDB 中按日期排序操作的过程。
- 永远记住,您将数据存储在一个集合中。
- 有两种方法可以将日期字段存储在文档中。
- Date() 字符串和 ISODate() 数据类型用于在文档中存储日期。
- 当您使用 sort() 方法对日期字段进行排序时,请检查您使用的是哪种数据类型。
查询:
db.document.insertOne({ "productId" : 1001, "productDeliveryDateTime": new Date() });
{
"acknowledged" : true,
"insertedId" : ObjectId("611c9e39e1fdc428cf238802")
}
在此示例中使用 Date() 字符串添加日期,集合名称是文档。 您可以使用 ISODate() 以相同的方式在文档中插入日期。
在 MongoDB 中使用数组按日期排序
使用 sort() 函数在 MongoDB 中使用数组按日期排序。 您必须在函数中提供日期字段和排序方向(升序或降序)。
在下面的示例中,将一些数组格式的数据添加到集合中。
db.student.insertMany([
{
"name" : "Tom",
"age" : 21,
"timestamp" : new ISODate("2021-04-01" )
},
{
"name" : "Emma",
"age" : 25,
"timestamp" : new ISODate("2021-10-31" )
},
{
"name" : "John",
"age" : 29,
"timestamp" : new ISODate("2021-05-02")
}
])
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("611df0e76cc7e05e5e7fe74b"),
ObjectId("611df0e76cc7e05e5e7fe74c"),
ObjectId("611df0e76cc7e05e5e7fe74d")
]
}
student为集合名,ISODate() 方法用于输入日期。 Date() 字符串方法也可用。
询问:
db.student.find().sort({timestamp:1}).pretty()
{
"_id" : ObjectId("611df0e76cc7e05e5e7fe74b"),
"name" : "Tom",
"age" : 21,
"timestamp" : ISODate("2021-04-01T00:00:00Z")
}
{
"_id" : ObjectId("611df0e76cc7e05e5e7fe74d"),
"name" : "John",
"age" : 29,
"timestamp" : ISODate("2021-05-02T00:00:00Z")
}
{
"_id" : ObjectId("611df0e76cc7e05e5e7fe74c"),
"name" : "Emma",
"age" : 25,
"timestamp" : ISODate("2021-10-31T00:00:00Z")
}
所有文档都按升序排序,同时使用了 pretty()
函数。 这允许您以可读的方式提供结果。
本文详细解释了在 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 进行开始查询。 它为查询中的模式匹配字符串提供正则表达式功能。