Comment implique-t-on correctement plusieurs dates dans mongoDB?

N'étant pas un gars Javascript particulièrement fort, j'ai du mal à essayer de mettre à jour beaucoup d'objets Date dans Mongo.

Il semble que $inc n'a pas encore été implémenté pour les objets Date . Donc, pour essayer de frapper un tas de dates par un jour, j'ai appelé (quelque chose comme) ce script de 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'idée de base semble fonctionner assez bien dans la coque 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") 

Mais pas très bien dans le script:

 TypeError: doc.my_date has no properties 

Je getTime donc que j'essaie d'appeler getTime sur null part, même si la requête dans ma mise à jour ne doit retourner que les documents où my_date existe.

Des idées sur ce qui se passe ici? Plus important encore: existe-t-il une meilleure façon de le faire?

Le problème est que ma requête $exists est (évidemment, à la deuxième apparence) au mauvais endroit. Les documents ont été renvoyés, sans doute, n'incluent pas my_date .

Voici la fonction corrigée, qui fonctionne comme prévu.

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