2012-11-09 66 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); 
}); 
相關問題