MongoDBdate比较问题

使用mongoose我想从我的数据库中select数据根据date。 在我的情况下,任何一个小时内没有被访问的帐户。

运行查询时,我没有得到任何结果:

db.accounts.findOne( { "last_used": { "$lte": "2016-05-26T09:31:08.480Z" }} ) 

这是我的代码:

斌/ App.js

 import AccountModel from '../Models/Account'; let lastHour = new Date(); lastHour.setHours(lastHour.getHours() - 1); let query = { "last_used": { "$lte" : ISODate(lastHour) } }; // Get account that was last used at least an hour ago AccountModel.findOne(query, function(err, account) { if(err) throw new Error(err); console.log(account); }); 

型号/ AccountModel.js

 import Mongoose from 'mongoose'; export default Mongoose.model( 'Account', new Mongoose.Schema({ email: { type: String, required: true, unique: true }, password: { type: String, required: true }, username: { type: String, required: true, unique: true }, date_added: { type: Date, default: Date.now }, last_used: { type: Date, default: Date.now } } )); 

db.accounts.find()

 { "_id" : ObjectId("574555d0348bc17a1ab67f2c"), "username" : "testuser", "email" : "testuser@mydomain.com", "password" : "SOMEHASH", "last_used" : ISODate("2016-05-24T08:13:41.080Z"), "date_added" : ISODate("2016-05-24T07:35:44.121Z"), "__v" : 0 } 

第一个查询应该是拉取上面的结果,因为它是上一个小时前访问的。

任何想法是我要错了?

       

网上收集的解决方案 "MongoDBdate比较问题"

尝试下面的代码。

而不是做ISOdate你可以使用moment.js减法的 moment().subtract() 。 这将会更容易做计算。

 import AccountModel from '../Models/Account'; var moment = require('moment'); let lastHour = moment().subtract(1, 'hour') let query = { "last_used": { "$lte" : new Date(lastHour) } }; // Get account that was last used at least an hour ago AccountModel.findOne(query, function(err, account) { if(err) throw new Error(err); console.log(account); }); 

对于date比较,您可以使用以下代码。

 let oneHour = 60 * 60 * 1000; let now = Date.now(); let comaparisonDate = new Date(now-oneHour ); let query = { "last_used": { "$lte" : comaparisonDate } };