2012-11-09 103 views
15

我想限制查询我只查看过去24小时内创建的文档。MongoDB:只抓取过去24小时创建的文档?

构建此查询的最佳方式是什么?如何根据日期去限制?

+0

此链接可能会帮助http://stackoverflow.com/questions/8665731/find-last-document当天为期7天 – Mihai

+0

从[原生驱动程序文档](http://mongodb.github.com/node-mongodb-native/)开始。我个人使用[mongoskin](https://github.com/kissjs/node-mongoskin)。还有[mongoose](http://mongoosejs.com/)和[others](https://npmjs.org/browse/keyword/mongodb)。当然,请参阅[DB的文档](http://www.mongodb.org/display/DOCS/Home)本身(在[queries](http://www.mongodb.org/display/DOCS/Querying)和其他东东)。还有10gen免费的[M101:MongoDB for Developers](https://education.10gen.com/courses/10gen/M101/2012_Fall/about)。 – elmigranto

+0

@elmigranto我使用node-mongodb-native //我知道如何使用mongo我只是不知道做这个查询的最佳方法。 – boom

回答

3

首先,如果您将向人们提供您的收藏架构,它将非常有帮助。

但是,仅仅因为它已经过去了3小时,没有一个人回答道,我会尝试:

假设你有你进入和它有一个场createdAt这是一个ISODate:

{ 
somefield: "test", 
createdAt: ISODate("2012-08-13T04:00:00Z") 
} 

所以你需要做的是把指数在此领域

db.yourColl.ensureIndex({createdAt:1}); 

然后你会得到你的Node.js当前时间替换为您24小时,让你开始的价值。 (据我所知,在mongdb没有现在的模拟。就在我的人,如果我错了。)

db.yourColl.find({ 
    createdAt: { 
    $gte: start 
    } 
}); 
13

如果你不使用其他任何指标,使用的是默认的ObjectId作为_id,你可以做到以下几点:

db.collection.find({ 
    _id: { 
    $gt: ObjectID.createFromTimestamp(Date.now()*1000 - 24*60*60) 
    } 
}, callback) 
+1

JavaScript执行失败:ReferenceError:ObjectID未定义 – DanFromGermany

+1

TypeError:Object function ObjectId(){[native code]}没有方法'createFromTimestamp' – DanFromGermany

+2

我的坏,'createFromTime'。他们可能会改变它:http://mongodb.github.io/node-mongodb-native/api-bson-generated/objectid。html#objectid-createfromtime –

7

对于任何人通过谷歌登陆这里,你可以在蒙戈外壳做法如下:

db.collection.find({ $where: function() { return Date.now() - this._id.getTimestamp() < (24 * 60 * 60 * 1000) } }) 
+1

小心使用'$ where' http:// docs .mongodb.org/manual/reference/operator/query/where /#op._S_where它存在性能问题。 –

8

添加createdAt场,指数,然后查询

db.getCollection("COLLECTION_NAME").find({"createdAt":{$gt:new Date(Date.now() - 24*60*60 * 1000)}}) 

这将返回比86400秒早的所有记录。

1

“TIME” 是字段,商店时间戳

db.your_collection_name.find({"TIME":{'$lt': new Date(),'$gte':new Date(new Date().setDate(new Date().getDate()-1))}},{}).count(); 
4

使用这猫鼬

let ObjectId = require('mongodb').ObjectID; 

Property.find({ 
    _id: { 
     $gt: ObjectId.createFromTime(Date.now()/1000 - 24 * 60 * 60) 
    } 
}, (err, result) => { 
    console.log(err || result); 
}); 
相关问题