根据date返回查询
我在MongoDB中有这样的数据
{ "latitude" : "", "longitude" : "", "course" : "", "battery" : "0", "imei" : "0", "altitude" : "F:3.82V", "mcc" : "07", "mnc" : "007B", "lac" : "2A83", "_id" : ObjectId("4f0eb2c406ab6a9d4d000003"), "createdAt" : ISODate("2012-01-12T20:15:31Z") }
如何查询db.gpsdatas.find({'createdAt': ??what here??})
以便它从数据库返回上述结果?
您可能想要进行范围查询,例如,在给定date之后创build的所有项目:
db.gpsdatas.find({"createdAt" : { $gte : new ISODate("2012-01-12T20:15:31Z") }});
我正在使用$gte
(大于或等于),因为这通常用于date查询,其中时间组件是00:00:00。
如果你真的想find一个date等于另一个date,语法会是
db.gpsdatas.find({"createdAt" : new ISODate("2012-01-12T20:15:31Z") });
如果你想在该date的任何地方获得物品,你需要比较两个date
你可以像这样创build两个date,以获得一天的开始和一天的结束。
var startDate = new Date(); // this is the starting date that looks like ISODate("2014-10-03T04:00:00.188Z") startDate.setSeconds(0); startDate.setHours(0); startDate.setMinutes(0); var dateMidnight = new Date(startDate); dateMidnight.setHours(23); dateMidnight.setMinutes(59); dateMidnight.setSeconds(59); ### MONGO QUERY var query = { inserted_at: { $gt:morning, $lt:dateScrapedMidnight } }; //MORNING: Sun Oct 12 2014 00:00:00 GMT-0400 (EDT) //MIDNIGHT: Sun Oct 12 2014 23:59:59 GMT-0400 (EDT)
刚刚在使用Node v0.12.7和v4.4.4在Mongo v3.2.3中实现类似的东西,并使用:
{ $gte: new Date(dateVar).toISOString() }
我正在传递一个ISODate(例如2016-04-22T00:00:00Z),这对于.find()查询可以使用或不使用toISOString函数。 但是在.aggregate()$ match查询中使用时,它不像toISOString函数!
您也可以尝试"dateProp": {$gt: new Date('06/15/2016').getTime() }
如果你想在过去5分钟内得到所有新东西,你将不得不做一些计算,但不难
首先在要匹配的属性上创build一个索引(包括sorting方向-1,降序排列1,sorting方向1)
db.things.createIndex({ createdAt: -1 }) // descending order on .createdAt
然后查询在最近5分钟(60秒* 5分钟)….中创build的文档,因为javascript的.getTime()
返回毫秒数,在将其用作new Date()
构造函数的input之前,需要多达1000个毫秒。
db.things.find({ createdAt: { $gte: new Date(new Date().getTime()-60*5*1000).toISOString() } }) .count()
new Date(new Date().getTime()-60*5*1000).toISOString()
说明new Date(new Date().getTime()-60*5*1000).toISOString()
如下所示:
首先我们计算“5分钟前”:
-
new Date().getTime()
给我们当前的时间,以毫秒为单位 - 我们想从中减去5分钟(以毫秒为单位):
5*60*1000
– 我只乘以60
秒,所以很容易改变。 如果我想要2个小时(120分钟),我可以将5
至120
更改。 -
new Date().getTime()-60*5*1000
给我们1484383878676
(5分钟前,以ms计)
现在我们需要将它提供给一个new Date()
构造函数来获取MongoDB时间戳所需的ISOstring格式。
-
{ $gte: new Date(resultFromAbove).toISOString() }
(mongodb .find()query) - 因为我们不能有variables,所以我们全部都是一样的:
new Date(new Date().getTime()-60*5*1000)
- …然后转换为ISOstring:
.toISOString()
-
new Date(new Date().getTime()-60*5*1000).toISOString()
给我们2017-01-14T08:53:17.586Z
当然,如果你使用的是node-mongodb-native驱动程序,这个variables有点简单,但是这个工作在mongo shell中,这是我通常用来检查的东西。