13

Date特に Javascript に強いわけではないので、Mongo で多くのオブジェクトを更新しようとして少し苦労しています。

オブジェクト$incについてはまだ実装されていないDateようです。それで、1日でたくさんの日付を試してみるために、bashから次のスクリプトを(のようなもので)呼び出しました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();

基本的な考え方は、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")

しかし、スクリプトではあまりうまくいきません:

TypeError: doc.my_date has no properties

getTimeしたがって、更新のクエリは存在するドキュメントのみを返す必要がありますが、nullどこかで呼び出そうとしていると思いますmy_date

ここで何が起こっているかについてのアイデアはありますか?もっと重要なのは、これを行うためのより良い方法はありますか?

4

3 に答える 3