Я использую Mongoose, MongoDB и Node.
Я хотел бы определить схему, в которой одним из ее полей является дата \ отметка времени.
Я хотел бы использовать это поле, чтобы вернуть все записи, которые были обновлены за последние 5 минут.
Из-за того, что в Mongoose я не могу использовать метод Timestamp (), я понимаю, что мой единственный вариант - использовать следующий метод Javascript:
time : { type: Number, default: (new Date()).getTime() }
Вероятно, это не самый эффективный способ запроса огромной БД. Я был бы очень признателен, если бы кто-нибудь мог поделиться более эффективным способом реализации этого.
Есть ли способ реализовать это с помощью Mongoose и иметь возможность использовать временную метку MongoDB?
Date.now
вместоDate.now()
.Date.now
потому чтоDate.now
это функция, которая будет запускаться при создании объектов.Date.now()
дата, когда вашmodels.js
был проанализирован. Т.е., если вы используете,Date.now()
все ваши объекты будут иметь одинаковую дату, и это будет дата, когдаmodels.js
был проанализирован.Текущая версия Mongoose (v4.x) имеет метку времени как встроенный параметр схемы:
var mySchema = new mongoose.Schema( {name: String}, {timestamps: true} );
Эта опция добавляет
createdAt
иupdatedAt
свойство, датируемые сDate
, и который делает всю работу за вас. Каждый раз, когда вы обновляете документ, он обновляетupdatedAt
свойство. Schema Timestamps Docs.источник
timestamps: true
вместо переопределения имен с помощьюtimestamps: {...}
.timestamps: true
, поэтому в будущем могут потребоваться некоторые дополнительные соображения. (Может быть, они отказываются от него? Вы правы, в документации не очень ясно, для этого варианта.)Если вам нужны собственные имена для ваших 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);
источник
var ItemSchema = new Schema({ name : { type: String } }); ItemSchema.set('timestamps', true); // this will add createdAt and updatedAt timestamps
Документы: https://mongoosejs.com/docs/guide.html#timestamps
источник
{ timestamps: true }
качестве второго аргументаnew Schema({}, {<here>})
.Это означает, что вам нужно обновлять дату на «сейчас» каждый раз, когда вы сохраняете объект. Может быть, вам это пригодится: плагин для создания и изменения Moongoose
источник
Первый :
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
Время в этом формате.
источник