2016-04-11 9 views
2

上の文書の日付のみの更新のためのデフォルト値は、私は、スキーマがそうのように宣言したマングースを持っています。次のように私はポストを作成するために使用するコードは次のとおりです。マングース:</p> <pre><code>var PostSchema = new mongoose.Schema({ timestamp: {type: Number, default: Date.now()}, }); </code></pre> <p>は、私は素晴らしい作品のポストを作成するためにルートを定義します。サーバーの再起動

/* POST Create new post (auth required)*/ 
router.post('/', auth, function(req, res, next) { 
    var post = new Post(); 
    post.save(function(err, post){ 
    if(err){ return next(err); } 
    res.json(post); 
    }); 
}); 

私は私の記事のタイムスタンプがで変更しないことを...時間に気づいたしかし!実際、彼らはまったく変わることはありません。たとえば、最後の3つの投稿は次のとおりです。

{ 
_id: "570aa4c946b52c7656cd8cf5", 
__v: 0, 
timestamp: 1460313633406 
}, 
{ 
_id: "570aa4e546b52c7656cd8cf6", 
__v: 0, 
timestamp: 1460313633406 
}, 
{ 
_id: "570aa59c46b52c7656cd8cf7", 
__v: 0, 
timestamp: 1460313633406 
} 

これらはすべて20分間隔で送信されましたが、すべてのタイムスタンプは同じです。

答えて

3

モンゴースモデルに関数を渡すことができます。モデルの作成時に値を割り当てます。 代わりにDate.nowだけを使用して、エントリを保存するたびに呼び出されます。

default: Date.now() //returns a value at model creation 
default: Date.now //adds the function to the model, mongoose will run any functions passed when a new entry is created -> that is what you need`\ 
+1

私は、関数を渡して関数の結果を渡すという微妙な違いはあまりありませんでした。後見ではそれはむしろ明らかです! – Quantaliinuxite

+0

多くの人々は、これらのむしろ「単純な」概念を理解することに問題があります。 'somefunction(param)(anotherparam) 'のような構文があると、もっと混乱することがあります。だから、誰もが知っているわけではない基本的な概念を弱める助けになるので、このような質問をするのが好きです。 – JoschuaSchneider

1

Date.now()はの値を持つ日付をとインスタンス化します。時間が変わると更新されません。各文書の日付ごとに異なる値が必要なので、デフォルト値を使用することはできません。代わりに、各ドキュメントの作成時に、その日付をDate.now()に設定します。

2

デフォルト値は、アプリを起動したときにのみ起こるれ、スキーマ・オブジェクトが作成された時点でインスタンス化された日付として保存されました。

ドキュメントにはpreフックを使用できます。 documentationには、説明したような例があります。

PostSchema.pre('save', function (next) { 
    this.timestamp = Date.now(); 
    next(); 
}); 
関連する問題

 関連する問題