MeteorのMongoDBコレクションにドキュメントを挿入するときに $ currentDate を使用する方法がわからない。
これは更新ではなく挿入でのみ使用できますか?奇妙に思えるかもしれませんが、代替手段はありません(new Date
代わりに)。
例
Stuff.insert({
owner: Meteor.userId(),
createdAt: ..., // how to create this field with $currentDate ?
theStuff: "Some of the good stuff"
})
注/思考/ TL、DR
{}
。$currentDate
より良い new Date
?本当にそうである場合、更新のみで動作する演算子を持つことのポイントは何ですか?
$currentDate
は 更新演算子 です。したがって、 collection.insert
メソッド。しかし upsert
がtrue
の場合、一致するドキュメントがない場合に新しいドキュメントを作成しますクエリ基準。 MongoDBオペレーターは nixの哲学 に従う傾向があります
一つのことをし、それをうまくやる
したがって、各オペレーターは1つのタスクのみを実行する必要があります。
$currentDate
がnew Date
よりも優れている理由/時期
まず、new Date
はJavaScriptDateインスタンスであることに言及したいと思います。
$currentDate
とnew Date
は、フィールドの値を現在の日付に更新するときに使用できますが、new Date
を使用する場合は、別の 更新演算子 を使用する必要があります働く。例えば:
new Date
を使用
db.collection.update({ "name": "bar" }, { "$set": { "date": new Date() }})
$currentDate
を使用
db.collection.update({ "name": "bar"},
{ "$currentDate": { "date": { "$type": date }}}
)
$currentDate
とは異なり、 new Date
はinsert
メソッドで使用でき、 Date
が複数の引数で呼び出される場合、値は特定に設定できます。
挿入操作内で作成された自動生成された「_id」からタイムスタンプを取得できます。
http://api.mongodb.com/Java/current/org/bson/types/ObjectId.html
メソッドObjectId.getTimestamp()を使用するだけです。
タイムスタンプの粒度は秒単位です。
コレクションモデルでautoValueを使用すると、より簡単になります。
createdAt:
type: Date
autoValue: ->
if this.isInsert
return new Date
else if this.isUpsert
return $setOnInsert: new Date
else
this.unset()
データを挿入または更新するときに自動的に日付を設定します
$ currentコンストラクトで使用される$ currentDateは、ドキュメントに存在しないフィールドを挿入するために使用できます。
Mongodb 3.4のドキュメントの引用:動作
If the field does not exist, $currentDate adds the field to a document.