返回查询基于日期
我在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??})
,使其返回我从分贝以上的结果?
你可能想使一个范围查询,例如,一个给定的日期之后创建的所有项目:
db.gpsdatas.find({"createdAt" : { $gte : new ISODate("2012-01-12T20:15:31Z") }});
我使用$gte
(大于或等于),因为这是通常用于日期 - 仅查询,其中时间组件是00:00:00。
如果你真的想找到一个等于另一个日期的日期,语法将
db.gpsdatas.find({"createdAt" : new ISODate("2012-01-12T20:15:31Z") });
如果你想获得的项目上,你需要比较两个日期
可以在该日期的任何地方创建两个像这样的第一个日期,以获得一天的开始和一天的结束。
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)
使用节点v0.12.7和v4.4.4和使用只是实现了在蒙戈V3.2.3类似的东西:
{ $gte: new Date(dateVar).toISOString() }
我传递一个ISODate(如2016-04-22T00 :00:00Z),这适用于带或不带toISOString函数的.find()查询。但是,在.aggregate()$ match查询中使用它时,它不喜欢toISOString函数!
您也可以尝试 "dateProp": {$gt: new Date('06/15/2016').getTime() }
如果你想在过去5分钟所有新的东西,你就必须做一些计算,但它并不难......
首先创建一个索引你想匹配的财产(包括升序排序方向-1下降和1)
db.things.createIndex({ createdAt: -1 }) // descending order on .createdAt
然后在最后5分钟创建的文档查询(60秒* 5分钟)....因为javascript的.getTime()
在将它用作new Date()
构造函数的输入之前返回需要多达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()
如下:
首先,我们计算出 “5分钟前”:
-
new Date().getTime()
给我们以毫秒为单位的当前时间 - 我们要减去5分钟(以毫秒为单位):
5*60*1000
- 我只是乘以60
秒,所以很容易改变。如果我想要2小时(120分钟),我可以将5
更改为120
。 -
new Date().getTime()-60*5*1000
给我们1484383878676
(5分钟前以毫秒为单位)
现在我们需要养活的是成new Date()
构造度日的MongoDB时间戳所需的ISO字符串格式。
-
{ $gte: new Date(resultFromAbove).toISOString() }
(MongoDB的.find()查询) - 既然我们不能有两个变量,我们做这一切在一杆:
new Date(new Date().getTime()-60*5*1000)
- ...然后转换为ISO字符串:
.toISOString()
-
new Date(new Date().getTime()-60*5*1000).toISOString()
给我们2017-01-14T08:53:17.586Z
当然,这是如果你使用的节点MongoDB的原生驱动变量更容易一些,但这部作品在周一去壳这是我通常用来检查的东西。
我认为你可以使用'Date.now()'而不是'new Date()。getTime()' – 2017-06-19 12:25:20
出错:ISODate未定义。 – coure2011 2012-01-13 06:36:06
您使用的是哪个版本? – mnemosyn 2012-01-13 09:17:04
node.js是v0.4.8 – coure2011 2012-01-13 09:25:42