MongoDB コレクションの 1 つのスキーマを変更中です。(私は日付を文字列として保存していましたが、現在はアプリケーションがそれらをISODate
s として保存しています。古いレコードもすべてISODate
s を使用するように変更する必要があります。) 更新を使用してこれを行う方法はわかっていると思いますが、この操作は何万ものレコードに影響を与えるため、100% うまくいくとは限らない操作を発行することをためらっています。少数のレコードについて、元のレコードとそれがどのように変更されるかを示す更新の「予行演習」を行う方法はありますか?
編集:各レコードに新しいフィールドを追加し、(データが正しいことを確認した後)そのフィールドの名前を元のフィールドと一致するように変更するというアプローチを使用することになりました。次のように見えました。
db.events.find({timestamp: {$type: 2}})
.forEach( function (e) {
e.newTimestamp = new ISODate(e.timestamp);
db.events.save(e);
} )
db.events.update({},
{$rename: {'newTimestamp': 'timestamp'}},
{multi: true})
ちなみに、文字列の時間をISODate
s に変換するその方法は、最終的に機能しました。(私はこのSOの答えからアイデアを得ました。)