MongoDB日期比较问题

时间:2016-05-26 10:51:39

标签: node.js mongodb mongoose

使用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
}

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

任何想法都是我出错了?

2 个答案:

答案 0 :(得分:0)

尝试以下代码。

您可以使用moment.js subtractISOdate而不是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
    }
};