如何根据日期筛选/查找MongoDB中的记录
我在MongoDB数据库中有一个集合,其中包含一些数据,希望根据日期(忽略时间)筛选和查找数据 样本数据如何根据日期筛选/查找MongoDB中的记录,mongodb,Mongodb,我在MongoDB数据库中有一个集合,其中包含一些数据,希望根据日期(忽略时间)筛选和查找数据 样本数据 { "_id" : ObjectId("563a38173c2ab9248c02d89e"), "jobId" : "oAEKMcCIJRIAAAFQbrAR6NDd", "jobName" : "CheckSessions", "jobDesc" : "Checks and deletes expired session data", "jobType" : "Job"
{
"_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列上有索引 下面的命令在示例中找到第二个对象,其id为:ObjectId(“563a38173c2ab9248c02d89f”) 通过对查询运行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") }
您如何保存
startTime
和endTime
?我认为您将它们保存为字符串,所以Mongo不理解它们是日期。您可以使用类似以下内容的简单字符串比较:{“startTime”:{$gt:“2015-11-03”}
我从上述注释中得到了一个提示。谢谢,buddyThanks,很高兴了解最佳实践,但是这里存储的数据来自其他表,因此这里的日期格式差别不大(确切地说是EST格式)。如何使用此特定日期格式查找记录?请指导。@dgiugg提供了非常准确的搜索方法(假设您有索引)。使用$gte:“2015-01-01 00:00:00”,您应该会没事的。我稍后会测试以确认。已更新。。。希望能有所帮助。
"startTime" : ISODate("2016-05-02T00:00:02Z")
> db.test.insert({startTime:new Date()})
> db.test.find()
// results
{ "_id" : ObjectId("563a49d63b1f1b7df0ebc4f5"), "startTime" : ISODate("2015-11-04T18:09:26.613Z") }