Mongoose、MongoDB、およびNodeを使用しています。
フィールドの1つがdate\timestampであるスキーマを定義したいと思います。
最後の5分間に更新されたすべてのレコードを返すために、このフィールドを使用したいと思います。
MongooseではTimestamp()メソッドを使用できないという事実により、私の唯一のオプションは次のJavascriptメソッドを使用することであることを理解しています。
time : { type: Number, default: (new Date()).getTime() }
恐らく巨大なDBをクエリするための最も効率的な方法ではありません。これを実装するより効率的な方法を誰かが共有できれば、本当に感謝しています。
Mongooseでこれを実装し、MongoDBタイムスタンプを使用できるようにする方法はありますか?
編集-2016年3月20日
Mongooseで コレクションのタイムスタンプ がサポートされるようになりました。
以下の@bobbyzの答えを考慮してください。たぶんこれはあなたが探しているものです。
MongooseはDate
型(基本的にはタイムスタンプ)をサポートしています。
time : { type : Date, default: Date.now }
上記のフィールド定義により、未設定のtime
フィールドを使用してドキュメントを保存すると、Mongooseはこのフィールドに現在の時刻を入力します。
現在のバージョンのMongoose(v4.x)には、スキーマへの組み込みオプションとしてタイムスタンプがあります。
var mySchema = new mongoose.Schema( {name: String}, {timestamps: true} );
このオプションは、createdAt
でタイムスタンプが付けられ、すべての作業を行うupdatedAt
およびDate
プロパティを追加します。ドキュメントを更新するたびに、updatedAt
プロパティが更新されます。 スキーマタイムスタンプドキュメント
var ItemSchema = new Schema({
name : { type: String }
});
ItemSchema.set('timestamps', true); // this will add createdAt and updatedAt timestamps
CreatedAtとupdatedAtの名前をカスタム名に変更する場合
const mongoose = require('mongoose');
const { Schema } = mongoose;
const schemaOptions = {
timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' },
};
const mySchema = new Schema({ name: String }, schemaOptions);
最初:_npm install mongoose-timestamp
_
次:let Timestamps = require('mongoose-timestamp')
次:_let MySchema = new Schema
_
次:MySchema.plugin(Timestamps)
次へ:const Collection = mongoose.model('Collection',MySchema)
その後、_Collection.createdAt
_または_Collection.updatedAt
_を好きな場所で使用できます。
作成日:曜日月月日00:00:00 GMT
時間はこの形式です。
過去5分間に更新されたすべてのレコードを返すために、このフィールドを使用したいと思います。
これは、オブジェクトを保存するたびに日付を「今」に更新する必要があることを意味します。多分あなたはこれが役に立つと思うでしょう: Moongoose create-modified plugin