복붙노트

[MONGODB] 어떻게 MongoDB의 하나 제대로 증가 많은 날짜는 무엇입니까?

MONGODB

어떻게 MongoDB의 하나 제대로 증가 많은 날짜는 무엇입니까?

특히 강력한 자바 스크립트 사람이없는, 나는 몽고의 Date 객체를 많이 업데이트하려고 약간의 문제가 있어요.

$ INC 아직 날짜 개체에 구현되어 있지 않은 것 같다. 그래서 시도하고 하루 날짜의 무리 범프, 나는 (같은) 떠들썩한 파티를 통해 몽고 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

난 내 업데이 트에서 쿼리가 my_date가 존재하는 문서를 반환해야하더라도, 널 어딘가에서 다음 getTime 전화를 시도하고 있음을 가져 그래서.

여기에 무슨 일이 일어나고 있는지에 관해서는 어떤 아이디어? 더 중요한 것은이를 할 수있는 더 좋은 방법은 무엇입니까?

해결법

  1. ==============================

    1.문제는 내 $가 잘못된 위치에 (두 번째 모습에, 분명히) 쿼리가 존재한다는 것입니다. 문서 my_date을 포함하지 않았다, 확실히 충분히, 그 반환되고 있었다.

    문제는 내 $가 잘못된 위치에 (두 번째 모습에, 분명히) 쿼리가 존재한다는 것입니다. 문서 my_date을 포함하지 않았다, 확실히 충분히, 그 반환되고 있었다.

    여기에 예상대로 작동하는 최대 패치 기능입니다.

    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) }}
        );
      });
    }
    
  2. from https://stackoverflow.com/questions/18759375/how-does-one-properly-increment-many-dates-in-mongodb by cc-by-sa and MIT license