ダミー コレクションを作成し、インポートしたいと考えています。各項目のフィールドの 1 つは、「作成」フィールドと「更新」フィールドです。MongoDb が現在の日付と時刻をインポート時の値として使用できるようにするには、source/json ファイルに何を入れることができますか?
これはうまくいきません
"created" : Date()
ダミー コレクションを作成し、インポートしたいと考えています。各項目のフィールドの 1 つは、「作成」フィールドと「更新」フィールドです。MongoDb が現在の日付と時刻をインポート時の値として使用できるようにするには、source/json ファイルに何を入れることができますか?
これはうまくいきません
"created" : Date()
mongoimport
CSV、TSV、または JSON 形式の既存のデータをインポートすることを目的としています。新しいフィールド (created
タイムスタンプなど) を挿入する場合は、それらの値を設定する必要があります。
たとえば、created
タイムスタンプを現在の時刻に設定する場合は、コマンド ラインから UNIX タイムスタンプを取得できます (エポックからの秒数になります)。
$ date +%s
1349960286
想定されるJSON<date>
表現はmongoimport
、エポックからのミリ秒を表す 64 ビットの符号付き整数です。unixtime 秒の値に 1000 を掛けて、JSON ファイルに含める必要があります。
{ "created": Date(1349960286000) }
別の方法として、作成されたタイムスタンプをドキュメントの挿入後にドキュメントに追加する方法があります。
例えば:
db.mycoll.update(
{created: { $exists : false }}, // Query criteria
{ $set : { created: new Date() }}, // Add 'created' timestamp
false, // upsert
true // update all matching documents
)
Stennie が正しく指摘したように、mongoimport
orだけでこれを行うことはできませんmongorestore
。これらは、以前にダンプしたデータを復元するためだけのものです。これを行う正しい方法は、データを復元してから、復元されたデータを更新することです。
新しい mongo 2.6では、時刻を現在のタイムスタンプに更新するために作成された$currentDate操作を使用して、これを簡単に行うことができます。
あなたの場合、次のようなものが必要です
db.users.update(
{},
{
$currentDate: {
created: true,
updated: true
},
}
)