2016-06-24 7 views
0

私は、ISO Dateというタイムスタンプを含むドキュメントを持つmongoDBコレクションを持っています。既存のISODateフィールドに年を追加するMongoDB

どういうわけか、これらの日付は挿入中に台無しになってしまい、現在は1970年です! 私は挿入コードを修正しました。今すぐ正しいタイムスタンプを挿入しています。

しかし、今は1970年代の古いデータを修正する必要があります。各レコードのタイムスタンプに特定の期間を追加する必要があります。 6月2016にそれを変えるために46年および5か月のように。

例えば
現在のタイムスタンプ:
"timestamp": "1970-01-01T00:00:00.000Z"

新しいタイムスタンプ:
` "タイムスタンプ": "2016-06-01T00:00:00.000Z"

、その後、次のタイムスタンプを10秒増やす

"timestamp": "2016-06-01T00:00:20.000Z"
"timestamp": "2016-06-01T00:00:30.000Z"

のように... ISはモンゴシェルから可能ですか?もしそうでなければ、他に何が使えますか?あなたは古い日付を気にしていない場合、あなたは

db.so.update({}, {$set: {date: new Date()}}) 

それとも、より良い$を使用を使用することができ、文書の古い日付を必要とするので、私は

col.find().forEach(){ col.update() } 

を使用

+0

明確な例がなくても難しいです。あなたの質問を編集して、新しい文書を挿入するための既存のコードを含めることができますか?それとも、問題を呈しているコレクションのサンプル文書ですか? – chridam

+0

@chridam、申し訳ありません、私は不明でした。私は自分の挿入を修正しました。私が必要としているのは、1970年のISODatesを更新し、46年を追加する方法です。前のものから10秒ずつ増分する必要があります。 –

+1

私はオリジナルの問題に興味があります、それは何ですか?挿入を修正したときに日付を修正するべきではありませんか? – kazenorin

答えて

1
// for demo, create a record with some date 
> db.so.insert({_id: new ObjectId(), date: new Date(1970, 1, 1, 10, 10, 10)}) 
WriteResult({ "nInserted" : 1 }) 

// be sure it's created 
> db.so.find() 
{ "_id" : ObjectId("576ceec5827bed78eaa65cc6"), "date" : ISODate("1970-02-01T04:10:10Z") } 

// docs.forEach => update.doc.date => new Date(oldDate: hours, minutes, seconds) 
> db.so.find().forEach(function(doc) { var date = doc.date; db.so.update({_id: doc._id}, {$set: {date: new Date(2016, 5, date.getDay(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds())}}) }) 

現在日付演算子

db.so.update({}, {$currentDate: {date: {$type: 'date'}}}) 

Reもっと詳しくmongo doc $currentDate

+0

これは素晴らしいことです。しかし、私は私がそれを増やす必要があることに気づいた。 'date.setSeconds(date.getSeconds + 10)'は動作しますか? –

+0

はい、mongo replはノードreplです。これはjavascript repl –

+0

です。実際には、現在の日付は必要ありません。 '1970年1月1日00:00:00.000Z'を' 1970-06-22 00:00:00.000Z'に変更し、各レコードで10秒を増やす必要があります。 –

関連する問題