web-dev-qa-db-ja.com

MongoDBシェルでISODateに日を追加/減算する

特定の日付から1日前または後のイベントを取得する必要があるクエリがあります。 ISODate変数に1日を加算または減算する必要があります。私のクエリは次のとおりです。

db.event.find().forEach( function (x) {

  print("x : " + x.EventID + ", " + x.ISODate); 
  db.events.find( {
   "$or" : [{
       "StartDate" : { "$gte" : x.ISODate } // Here i need to subtract one day
       }, {
           "EndDate": { "$lt" : x.ISODate} // Here i need to add one day
           }]
}).forEach(function(otherDay) {
        print("x.EventID : " + x.EventID + ", other.Date : " + otherDay.StartDate + " - " + otherDay.EndDate);
      });

});

MongodbシェルのISODate変数に日を追加または削除するにはどうすればよいですか?

19
cuneytyvz

これは Mongodbで最後のX分のデータを取得するためのクエリ で回答されました

query = {
    timestamp: { // 18 minutes ago (from now)
        $gt: new Date(ISODate().getTime() - 1000 * 60 * 18)
    }
}

そして、あなたの場合、数日間:

"StartDate" : { "$gte" : new Date(ISODate().getTime() - 1000 * 3600 * 24 * 3) }

または

"StartDate" : { "$gte" : new Date(ISODate().getTime() - 1000 * 86400 * 3) }

(ここで3は日数です)

24
Constantin Guay

正確な答えではなく、関連しています。

MongoDBコレクション内のすべてのアイテムの日付フィールドを所定の位置にインクリメントする必要がありました。

以下のクエリは、myCollectionmyDateField1日を追加します。

db.myCollection.find().snapshot().forEach(
    function (elem) {
        db.myCollection.update(
            {
                _id: elem._id
            },
            {
                $set: {
                    myDateField: new Date(elem.myDateField.getTime() + 1*24*60*60000)
                }
            }
        );
    }
);

1 day = 1*24*60*60000 = 1 x 24 hours x 60 minutes x 60 seconds x 1000 milliseconds
  • 時間を差し引く/戻す必要がある場合は、マイナスを使用します。
18
cenk