web-dev-qa-db-ja.com

保存するたびに、Mongooseスキーマの現在の日付でプロパティを更新するにはどうすればよいですか?

データベースコレクションで、レコードが現在の日時で更新されるたびに、「lastChanged」フィールドを更新したいと思います。次のように、マングースのデフォルトの日付と同じ形式にします。

ISODate("2011-10-06T14: 01: 31.106Z")

知恵の言葉はありますか?

16
wilsonpage

ISO文字列を使用したいだけの場合:

new Date().toISOString()
19
greenimpala

これを実現する1つの方法は、 Mongoose Middleware を使用して、フィールドの事前保存を更新することです。

_var mongoose = require('mongoose');
var Schema = mongoose.Schema;
//schema
var SomethingSchema = new Schema({
  text: {type: String},
  createdAt: {type: Date, default: Date.now},
  updatedAt: {type: Date, default: Date.now}
});

//middle ware in serial
SomethingSchema.pre('save', function preSave(next){
  var something = this;
  something.updatedAt(Date.now());
  next();
});
_

ただし、ミドルウェアが常に呼び出されるとは限らないようです。

FindAndUpdate()に関する注記

preおよびpostは、_Model.update_、_.findByIdAndUpdate_、_.findOneAndUpdate_、_.findOneAndRemove_、など、データベースで直接実行される更新操作では呼び出されません。および_.findByIdAndRemove_。order preまたはpostミドルウェアを利用するには、ドキュメントをfind()し、initvalidatesave、またはremove関数。 説明 を参照してください。

更新:この質問を参照してください " created_atフィールドとupdated_atフィールドをマングーススキーマに追加 "

12
Dave Jensen

数日以内に、Mongoは新しい2.6バージョンを発表する予定です(現在、実験的な2.5.xバージョンをダウンロードできます)。 他の多くの機能 の中で $ currentDate を使用できます。これはまさにあなたが望むことをするでしょう:

db.users.update( 
  <criteria>,
  {
     $currentDate: { yourField: true},
  }
)
9
Salvador Dali