Date Comparison with Mongoose

I am trying to find a user with a user who has a place that is newer or older than a certain date.

Scheme

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
    }
}, {

Query

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

Data

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" }

No matter what I set for the date, I always get an empty result. Trying with 'location.accuracy'and installing less or more than it works.

+4
source share
2 answers

The error is how I saved the dates. As you can see from the above data, they are saved as milliseconds 1406101134199, and not as the ISODate format ISODate("2014-10-20T21:50:23.196Z"). This happened because of a string Date.now()that does not return the current date object, but milliseconds. Using new Date()bug fixed.

+6
source

removeMinutes Date();

Query:

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
    );
}
0

All Articles