mongodb中根据时间过滤进行查询的操作方法

2023-12-04 0 680
目录
  • mongodb中简单的根据时间过滤进行查询
  • 补充:如何根据日期过滤/查找MongoDB中的记录
    • 问题:如何根据日期过滤/查找MongoDB中的记录
    • 解答

mongodb中简单的根据时间过滤进行查询

目的:查询当某天的文档信息

db.getCollection(\’test\’).find
({ \”name\” : { \”$regex\” : \”王\” },
\”is_history\” : 0,
\”adddate\”:{\”$gte\”:ISODate(\”2018-01-02T00:00:00Z\”),\”$lte\”:ISODate(\”2018-01-03T00:00:00Z\”)}
},
{
name:1,adddate:1,sex:1,certcode:1,certnumber:1,istomysql:1
}
)

mongodb的语法,第一个大括号里面是:表示过滤条件

第二个大括号里面是 :控制显示的字段

里面有一个adddate这个过滤条件是如何按照时间来进行过滤查找$gte是大于等于 $lte是小于等于

补充:如何根据日期过滤/查找MongoDB中的记录

问题:如何根据日期过滤/查找MongoDB中的记录

我在 MongoDB 数据库中有一个集合,其中包含一些数据,并希望根据日期(忽略时间)过滤和查找数据。

样本数据

{
\”_id\” : ObjectId(\”563a38173c2ab9248c02d89e\”),
\”jobId\” : \”oAEKMcCIJRIAAAFQbrAR6NDd\”,
\”jobName\” : \”CheckSessions\”,
\”jobDesc\” : \”Checks and deletes expired session data\”,
\”jobType\” : \”Job\”,
\”startTime\” : \”2015-11-04 00:00:01\”,
\”endTime\” : \”2015-11-04 00:00:01\”,
\”domainName\” : \”root\”,
\”recurrencePeriod\” : \”60\”,
\”recurrencePeriodDesc\” : \”HOURS(1)\”
}
{
\”_id\” : ObjectId(\”563a38173c2ab9248c02d89f\”),
\”jobId\” : \”C6wKMcCIJXoAAAFQm78R6NCm\”,
\”jobName\” : \”CheckSessions\”,
\”jobDesc\” : \”Checks and deletes expired session data\”,
\”jobType\” : \”Job\”,
\”startTime\” : \”2015-11-03 23:00:00\”,
\”endTime\” : \”2015-11-03 23:00:01\”,
\”domainName\” : \”root\”,
\”recurrencePeriod\” : \”60\”,
\”recurrencePeriodDesc\” : \”HOURS(1)\”
}

我使用以下命令来获取大于特定日期的数据,但它没有给我任何结果。 startTime 和 endTime 都是 EST 格式。不知道我错过了什么。请指导。

db.jobs.find({\”startTime\” : { $gt : new Date(\”2015-11-03\”)}});

解答

答:可以简单的通过字符串比较来查询。

首先,确保 startTime 列上的索引

db.test.ensureIndex({startTime:1})

以下命令在_id:ObjectId("563a38173c2ab9248c02d89f")示例中找到您的第二个对象

db.test.find({
startTime: {
$gte: \’2015-11-03 00:00:00\’,
$lt: \’2015-11-04 00:00:00\’
}
}).pretty()

通过在我们的查询上运行 explain(),我们可以看到索引实际上正在使用中:

db.test.find({startTime:{$gte:\’2015-11-03 00:00:00\’, $lt:\’2015-11-04 00:00:00\’}}).explain()
{
\”cursor\” : \”BtreeCursor startTime_1\”,
\”isMultiKey\” : false,
\”n\” : 1,
\”nscannedObjects\” : 1,
\”nscanned\” : 1,
\”nscannedObjectsAllPlans\” : 1,
\”nscannedAllPlans\” : 1,
\”scanAndOrder\” : false,
\”indexOnly\” : false,
\”nYields\” : 0,
\”nChunkSkips\” : 0,
\”millis\” : 0,
\”indexBounds\” : {
\”startTime\” : [
[
\”2015-11-03 00:00:00\”,
\”2015-11-04 00:00:00\”
]
]
},
\”server\” : \”Jaans-MBP.home:27017\”
}

我的建议仍然是遵循最佳实践并以正确的日期格式存储您的日期字段,例如

\”startTime\” : ISODate(\”2016-05-02T00:00:02Z\”)

在 MongoDB shell 中,您只需通过

> db.test.insert({startTime:new Date()})
> db.test.find()
// results
{ \”_id\” : ObjectId(\”563a49d63b1f1b7df0ebc4f5\”), \”startTime\” : ISODate(\”2015-11-04T18:09:26.613Z\”) }

到此这篇关于mongodb中简单的根据时间过滤进行查询的文章就介绍到这了,更多相关mongodb时间过滤查询内容请搜索悠久资源以前的文章或继续浏览下面的相关文章希望大家以后多多支持悠久资源!

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 MongoDB mongodb中根据时间过滤进行查询的操作方法 https://www.u-9.cn/database/mongodb/70292.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务