在 MongoDB 中查找两个日期之间的对象
在本文中,简要讨论了在两个日期之间查找对象的问题。 此外,用于此目的的运算符 $gte、$lte、$gt 和 $lt 也有简要的详细说明。
在 MongoDB 中查询日期范围
本节将引导您编写 MongoDB 日期范围查询以根据时间戳或日期范围检索数据。 例如,MongoDB 中的日期查询是大于或小于时间或日期的日期。
要使用日期范围在 MongoDB 中执行查询,请使用下面描述的基本语法。
db.collection.find({
day: {
$gt: ISODate("2020-01-21"),
$lt: ISODate("2020-01-24")
}
})
此查询将返回集合中日期字段大于或等于 2020-01-21 但小于或等于 2020-01-24 的所有项目。 上面概述的步骤很简单。
但是,这些方向存在一些小的不一致。
MongoDB 中 $gt
语法:
{ field: { $gt: value } }
因为字段值大于(即 >
)指定值,$gt
选择那些文档。
对于大多数数据类型,比较运算符仅在 BSON 类型与查询值的类型匹配时才对字段执行比较。 然而,MongoDB 的类型括号允许有限的跨 BSON 比较。
下面的示例使用库存集合。 这是将在下面所有示例中使用的示例数据库。
db.inventory.insertMany( [
{
"item": "nuts", "quantity": 31,
"carrier": { "name": "import", "fee": 3 }
},
{
"item": "screws", "quantity": 50,
"carrier": { "name": "import", "fee": 4 }
},
{
"item": "washers", "quantity": 11,
"carrier": { "name": "import", "fee": 1 }
}
] )
匹配文档字段
选择库存集合中数量大于 20 的所有文档。
db.inventory.find( { quantity: { $gt: 20 } } )
输出:
基于嵌入式文档字段执行更新
下面的示例根据与嵌入文档中的字段的 $gt
比较设置价格字段。
db.inventory.updateOne(
{ "carrier.fee": { $gt: 2 } }, { $set: { "price": 9.99 } }
)
输出:
此 updateOne()
函数检查名为 carrier 的嵌入式文档中的费用子字段。 第一份文件找到了一个大于 2 的费用值并设置了价格:9.99。
要在 carrier.fee 大于 2 时调整所有文档中价格字段的值,请使用 updateMany()
。
MongoDB 中 $gte
语法:
{ field: { $gte: value } }
$gte 选择字段值大于或等于(即>=
)给定值(例如值)的文档。
对于大多数数据类型,比较运算符仅在 BSON 类型与查询值的类型匹配时才对字段执行比较。 然而,MongoDB 的类型括号允许有限的跨 BSON 比较。
匹配文档字段
选择库存集合中数量大于或等于 20 的所有文档。
db.inventory.find( { quantity: { $gte: 20 } } )
输出:
基于嵌入式文档字段执行更新
在以下示例中,价格字段是使用 $gte 与嵌入文档中的字段进行比较设置的。
db.inventory.updateMany(
{ "carrier.fee": { $gte: 2 } }, { $set: { "price": 9.99 } }
)
输出:
此 updateOne()
函数检查名为 carrier 的嵌入式文档中的费用子字段。 price:当 fee 的值大于或等于 2 时,每份文件加 9.99。
当 carrier.fee 大于 2 时,使用 updateOne()
仅在第一页设置价格字段的值。
MongoDB 中 $lt
语法:
{ field: { $lt: value } }
$lt
选择字段值小于(或等于)指定值的文档。
对于大多数数据类型,比较运算符仅在 BSON 类型与查询值的类型匹配时才对字段执行比较。 然而,MongoDB 的类型括号允许有限的跨 BSON 比较。
匹配文档字段
选择库存集合中数量小于 20 的所有文档。
db.inventory.find( { quantity: { $lt: 20 } } )
输出:
基于嵌入式文档字段执行更新
在以下示例中,价格字段将基于与嵌入文档中的字段的 $lt 比较来设置。
db.inventory.updateMany( { "carrier.fee": { $lt: 20 } }, { $set: { price: 9.99 } } )
输出:
此 updateOne()
函数检查名为 carrier 的嵌入式文档中的费用子字段。 当charge值小于2时,每条记录加price:9.99。
当 carrier.fee 小于 2 时,使用 updateOne()
仅在第一页设置价格字段的值。
MongoDB 中 $lte
语法:
{ field: { $lte: value } }
$lte
选择字段值小于或等于(即 =)指定值的文档。
对于大多数数据类型,比较运算符仅在 BSON 类型与查询值的类型匹配时才对字段执行比较。 然而,MongoDB 的类型括号允许有限的跨 BSON 比较。
匹配文档字段
考虑以下示例:
db.inventory.find( { quantity: { $lte: 20 } } )
此查询选择库存集合中数量字段值小于或等于 20 的所有条目。
输出:
基于嵌入式文档字段执行更新
在以下示例中,价格字段是使用 $lte 与嵌入文档中的字段进行比较设置的。
db.inventory.updateMany(
{ "carrier.fee": { $lte: 5 } }, { $set: { price: 9.99 } }
)
输出:
此 updateMany()
函数在名为 carrier 的嵌入式文档中查找费用子字段。 price:如果 fee 的值小于或等于 5,则将 9.99 添加到每个文件。
当 carrier.fee 小于或等于 5 时,使用 updateOne()
仅在第一页更改价格字段的值。
以下信息解释了如何使用随附的文档将此语法应用于数据集合。
db.data.insertOne({day: new Date("2022-01-20"), amount: 40})
db.data.insertOne({day: new Date("2022-01-21"), amount: 32})
db.data.insertOne({day: new Date("2022-01-22"), amount: 19})
db.data.insertOne({day: new Date("2022-01-23"), amount: 29})
db.data.insertOne({day: new Date("2022-01-24"), amount: 35})
在 MongoDB 中查找两个日期之间的文档
使用下面的查询来查找在两个日期之间具有日期字段的所有文档。
db.data.find({
day: {
$gt: ISODate("2020-01-21"),
$lt: ISODate("2020-01-24")
}
})
上面的查询返回以下文档,如下所示。
{ _id: ObjectId("618548bc7529c93ea0b41490"),
day: 2020-01-22T00:00:00.000Z,
amount: 19 }
{ _id: ObjectId("618548bc7529c93ea0b41491"),
day: 2020-01-23T00:00:00.000Z,
amount: 29 }
在 MongoDB 中查找特定日期后的文档
使用下面的查询查找日期字段设置为指定日期之后的日期的所有文档。
db.data.find({
day: {
$gt: ISODate("2020-01-22")
}
})
上面的查询返回以下文档。
{ _id: ObjectId("618548bc7529c93ea0b41491"),
day: 2020-01-23T00:00:00.000Z,
amount: 29 }
{ _id: ObjectId("618548bc7529c93ea0b41492"),
day: 2020-01-24T00:00:00.000Z,
amount: 35 }
在 MongoDB 中查找特定日期之前的文档
使用下面的查询查找日期字段设置为特定日期之前的所有文档。
db.data.find({
day: {
$lt: ISODate("2020-01-22")
}
})
上面的查询返回以下文档。
{ _id: ObjectId("618548bc7529c93ea0b4148e"),
day: 2020-01-20T00:00:00.000Z,
amount: 40 }
{ _id: ObjectId("618548bc7529c93ea0b4148f"),
day: 2020-01-21T00:00:00.000Z,
amount: 32 }
MongoDB中基于日期的比较
让我们看看如何使用 MongoDB 根据日期返回查询。
使用文档创建一个名为数据的集合以更好地理解这个想法。 以下是构建包含记录的集合的查询。
db.data.insertOne({"PassengerName":"John","PassengerAge":23,"PassengerArrivalTime":new ISODate("2018-03-10 14:45:56")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8a57be9064dcd4a68b70e4")
}
db.data.insertOne({"PassengerName":"Larry","PassengerAge":21,"PassengerArrivalTime":new ISODate("2018-05-19 11:10:23")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8a57bf9064dcd4a68b70e5")
}
db.data.insertOne({"PassengerName":"Mike","PassengerAge":24,"PassengerArrivalTime":new ISODate("2018-08-25 16:40:12")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8a57bf9064dcd4a68b70e6")
}
db.data.insertOne({"PassengerName":"Carol","PassengerAge":26,"PassengerArrivalTime":new ISODate("2019-01-29 09:45:10")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8a57bf9064dcd4a68b70e7")
}
使用 find()
函数,将选择集合中的所有文档。 以下是对此的查询。
db.data queryFromDate.find().pretty();
上面的查询将返回以下文档,如下面的屏幕截图所示。
以下是基于日期的返回查询。 创建日期在 2018-05-19T11:10:23Z 之后的记录将被称为:
> db.data queryFromDate.find({"PassengerArrivalTime" : { $gte : new ISODate("2018-05-19T11:10:23Z") }}).pretty();
此查询返回以下文档,如下面的屏幕截图所示。
因此,通过本文的帮助,用户了解了有关使用 Date()
方法的信息。 示例简要说明 $gte
和 $lte
命令。
此外,还用代码片段说明了基于数据的返回查询。
相关文章
在 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 进行开始查询。 它为查询中的模式匹配字符串提供正则表达式功能。