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 }
第一个查询应该是拉取上面的结果,因为它是上一个小时前访问的。
任何想法是我要错了?
尝试下面的代码。
而不是做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 } };