根据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分钟前”:

  1. new Date().getTime()给我们当前的时间,以毫秒为单位
  2. 我们想从中减去5分钟(以毫秒为单位): 5*60*1000 – 我只乘以60秒,所以很容易改变。 如果我想要2个小时(120分钟),我可以将5120更改。
  3. new Date().getTime()-60*5*1000给我们1484383878676 (5分钟前,以ms计)

现在我们需要将它提供给一个new Date()构造函数来获取MongoDB时间戳所需的ISOstring格式。

  1. { $gte: new Date(resultFromAbove).toISOString() } (mongodb .find()query)
  2. 因为我们不能有variables,所以我们全部都是一样的: new Date(new Date().getTime()-60*5*1000)
  3. …然后转换为ISOstring: .toISOString()
  4. new Date(new Date().getTime()-60*5*1000).toISOString()给我们2017-01-14T08:53:17.586Z

当然,如果你使用的是node-mongodb-native驱动程序,这个variables有点简单,但是这个工作在mongo shell中,这是我通常用来检查的东西。