我在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.gpsdata。找到({“createdAt”:? ?这里是什么??}),以便它从db返回上面的数据结果给我?
如果你想在过去的5分钟内得到所有的新东西,你必须做一些计算,但这并不难…
首先在想要匹配的属性上创建一个索引(包括排序方向-1表示降序,1表示升序)
db.things.createIndex({ createdAt: -1 }) // descending order on .createdAt
查询最近5分钟(60秒* 5分钟)内创建的文档....因为javascript的. gettime()返回毫秒,所以在将其用作新的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分钟前,毫秒)
现在我们需要将其提供给一个新的Date()构造函数,以获得MongoDB时间戳所需的ISO字符串格式。
{$gte: new Date(resultFromAbove).toISOString()} (mongodb .find()查询)
因为我们不能有变量,所以我们一次就完成了:
...然后转换为ISO字符串:.toISOString()
new Date(new Date().getTime()-60*5*1000).toISOString()给出了2017-01-14T08:53:17.586Z
当然,如果你使用node-mongodb-native驱动程序,这对变量来说会更容易一些,但这在mongo shell中是有效的,这是我通常用来检查东西的。