与Mongoose比较date

我试图find用户的位置是比某个date更新或更旧的用户。

架构

var userSchema = new Schema({ firstName: String, lastName: String, email: String, facebookId: String, googleId: String, token: {type: String, unique: true, required: true}, friends: [userSchema], location: { type: { timestamp: Date, accuracy: Number, coordinates: { lat: Number, lng: Number } }, default: null } }, { 

询问

 userSchema.statics.findRecentUpdates = function (ids, minutesSinceLast, callback) { var recentDate = new Date().removeMinutes(minutesSinceLast); this.find( {'location.timestamp': {$lt: recentDate}}, callback ); } 

数据

 db.users.find(); { "__v" : 1, "_id" : ObjectId("53cecb60fe7d090000030328"), "email" : "JzLrmXy@givnZhE.com", "facebookId" : "9138129367", "firstName" : "Cornel", "friends" : [ ObjectId("53cecb4dfe7d090000030327") ], "lastName" : "GD", "location" : { "coordinates" : { "lat" : 18.040808, "lng" : 59.330557 }, "timestamp" : 1406061408964, "accuracy" : 1 }, "token" : "988bb52b-cc0c-492d-8c75-f1f7d882157d" } { "__v" : 20, "_id" : ObjectId("53cf668eff9ef40000f76ce5"), "email" : "CZteADE@WFdFFiQ.com", "facebookId" : "5762365752", "firstName" : "Yuan", "friends" : [ ], "lastName" : "vh", "location" : { "accuracy" : 3, "coordinates" : { "lat" : 59.356862, "lng" : 17.996661 }, "timestamp" : 1406101134199 }, "token" : "51278cb7-9e55-4cc5-b635-7cd289b2fa6a" } { "__v" : 21, "_id" : ObjectId("53cecb4dfe7d090000030327"), "email" : "s@gmail.com", "facebookId" : "7237853051", "firstName" : "M", "friends" : [ ObjectId("53cecb60fe7d090000030328") ], "lastName" : "H", "location" : { "accuracy" : 0, "coordinates" : { "lng" : 18.0246476, "lat" : 59.3827026 }, "timestamp" : 1413838822856 }, "token" : "5d870480-05c0-4a83-ae44-cfe39692d308" } 

无论我设定的date,我总是得到一个空的结果。 尝试'location.accuracy'和设置小于或大于一个作品。

错误是我如何存储date。 从上面的数据可以看出,它们以毫秒1406101134199而不是ISODate格式ISODate("2014-10-20T21:50:23.196Z") 。 这是由于Date.now()行不返回当前的date对象,而是毫秒。 使用new Date()修复了错误。

分配新的Date()后需要放置removeMinutes;

查询:

 userSchema.statics.findRecentUpdates = function (ids, minutesSinceLast, callback) { var recentDate = new Date(); recentDate.removeMinutes(minutesSinceLast); // It will remove the minutes this.find( {'location.timestamp': {$lt: recentDate}}, callback ); }