2016-04-11 48 views
1

デフォルト値で日付フィールドを作成するには、コレクションに挿入が発生するたびにデフォルト値を現在のタイムスタンプにする必要があります。Mongo dbのデフォルトのタイムスタンプ

+0

いずれのドライバも使用していますか?プログラミング言語? – styvane

+0

.Netサービスからデータを取得していますが、その部分にはアクセスできません。 Mongoのセットアップ自体でフィールドを作成する方法はありますか? –

+0

文書をどのように挿入していますか? 'mongodb-csharp'ドライバまたはシェルを使用していますか? – styvane

答えて

1

現在のtimestampの場合は、挿入中にこれを行うだけです。

collection.insert({ "date": datetime.now() } 
+0

ありがとうthalaiva ..このクエリは、すべての挿入をクエリで実行するために処理できます。私はそれに同意します。この日付の時間の挿入は、RDBMSの概念のような以下のクエリ@columnName datetime default CURRENT_TIMESTAMPのような方法で対応します。 –

+0

@JagadeesanG:あなたがスキーマを使っているならmongoose ... mongodbはそのようなスキーマレスです。 http://mongoosejs.com/docs/2.7.x/docs/schematypes.html – Thalaivar

2

非常に簡単です! たとえば、Mongooseを使用している場合、関数をデフォルト値として渡すことができます。 その後、Mongooseは挿入するたびに関数を呼び出します。

{ 
    timestamp: { type: Date, default: Date.now}, 
    ... 
} 

するだけの値に一度だけ日付を設定する関数オブジェクト自身Date.nowと、このように関数呼び出しDate.now()のない値を渡すことを忘れないでください:

だからあなたのスキーマであなたのような何かをするだろうあなたのスキーマが作成されたときの

この解決策は、Mongoose & Node.Jsに適用され、より正確に指定しなかったので、あなたのユースケースであることを願っています。

0

ありがとうございました.. _idフィールドからタイムスタンプを取得する別の方法が見つかりました。 objectid.gettimestamp()これからタイムスタンプを取得できます。

0

これはちょっと古いですが、Date.now()メソッドを使用すると、現在の日付と時刻が取得されず、ノードプロセスの実行を開始した時点で停止します。したがって、すべてのタイムスタンプは、サーバーを起動したときのDate.now()にデフォルト設定されます。 これを回避する方法の1つは、次のようにすることでした。

ExampleSchema.pre('save', function (next) { 
    const instanceOfSchema = this; 
    if(!instanceOfSchema.created_at){ 
     instanceOfSchema.created_at = Date.now(); 
    } 
    instanceOfSchema.updated_at = Date.now(); 
    next(); 
})