web-dev-qa-db-ja.com

MeteorのMongoDBコレクションに$ currentDateのフィールドを挿入する

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
  • Moment.js espを使用する場合、1つの良い点は、$ currentDateがISO 8601形式で入力されることです。
  • 最初から何らかの種類のアップサートを行う答えはありますか?もしそうなら、これは意図しない結果をもたらす可能性がありますか?
16
Mallory-Erik

本当にそうである場合、更新のみで動作する演算子を持つことのポイントは何ですか?

$currentDate更新演算子 です。したがって、 collection.insertメソッド。しかし upserttrueの場合、一致するドキュメントがない場合に新しいドキュメントを作成しますクエリ基準。 MongoDBオペレーターは nixの哲学 に従う傾向があります

一つのことをし、それをうまくやる

したがって、各オペレーターは1つのタスクのみを実行する必要があります。

$currentDatenew Dateよりも優れている理由/時期

まず、new DateJavaScriptDateインスタンスであることに言及したいと思います。

$currentDatenew 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 Dateinsertメソッドで使用でき、 Dateが複数の引数で呼び出される場合、値は特定に設定できます。

26
styvane

挿入操作内で作成された自動生成された「_id」からタイムスタンプを取得できます。

http://api.mongodb.com/Java/current/org/bson/types/ObjectId.html

メソッドObjectId.getTimestamp()を使用するだけです。

タイムスタンプの粒度は秒単位です。

5
Ludek

コレクションモデルでautoValueを使用すると、より簡単になります。

createdAt:
type: Date
autoValue: ->
  if this.isInsert
    return new Date
  else if this.isUpsert
    return $setOnInsert: new Date
  else
    this.unset()

データを挿入または更新するときに自動的に日付を設定します

0
Monika Mathur

$ currentコンストラクトで使用される$ currentDateは、ドキュメントに存在しないフィールドを挿入するために使用できます。

Mongodb 3.4のドキュメントの引用:動作

If the field does not exist, $currentDate adds the field to a document.
0
Bhumi Singhal