Come si incrementa correttamente molte date in mongoDB?

Non essendo un tipo particolarmente forte di Javascript, ho un po 'di problemi cercando di aggiornare un sacco di oggetti Date in Mongo.

Sembra che $inc non sia ancora stato implementato per gli oggetti Date . Quindi, per provare a colpire un gruppo di date per un giorno, ho chiamato (qualcosa di simile) questo script da bash via mongo myScript.js :

 conn = new Mongo(); db = conn.getDB('myDatabase'); var incrementDates = function() { db.blah.find(myQuery).forEach(function(doc) { db.blah.update( { _id : doc._id , my_date : { $exists : true } } , { $set : { my_date : new Date(doc.my_date.getTime() + 86400000) }} ); }); } incrementDates(); 

L'idea di base sembra funzionare abbastanza bene nella shell mongoDB:

 > var doc = db.blah.findOne(myQuery) > doc.my_date ISODate("1962-11-02T23:00:00Z") > new Date(doc.my_date.getTime() + 86400000); ISODate("1962-11-03T23:00:00Z") 

Ma non così bene nello script:

 TypeError: doc.my_date has no properties 

Quindi lo prendo che sto cercando di call getTime in un null da qualche parte, anche se la query nel mio aggiornamento dovrebbe restituire solo i documenti in cui esiste il my_date .

Qualche idea su cosa sta succedendo qui? Ancora più importnte: c'è un modo migliore per farlo?

Il problema è che il mio $exists query è (ovviamente, al secondo look) nel posto sbagliato. I documenti sono stati restituiti che, certamente, non hanno incluso il my_date .

Ecco la function patchata, che funziona come previsto.

 var incrementDates = function() { db.blah.find({ ... , my_date : { $exists : true } ).forEach(function(doc) { db.blah.update( { _id : doc._id } , { $set : { my_date : new Date(doc.my_date.getTime() + 86400000) }} ); }); }