使用Mongoose我正在尝试根据日期从我的数据库中选择数据。就我而言,任何帐户在一小时内都没有被访问过。
运行查询时,我没有得到任何结果:
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
}
第一个查询应该是拉上面的结果,因为它是在一小时前最后一次访问的。
任何想法都是我出错了?
答案 0 :(得分:0)
尝试以下代码。
您可以使用moment.js subtract的ISOdate
而不是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);
});
答案 1 :(得分:0)
对于日期比较,您可以使用以下代码。
let oneHour = 60 * 60 * 1000;
let now = Date.now();
let comaparisonDate = new Date(now-oneHour );
let query = {
"last_used": {
"$lte" : comaparisonDate
}
};