Какой SchemaType в Mongoose лучше всего подходит для отметки времени?
Я использую Mongoose, MongoDB и Node.
Я хотел бы определить схему, где одно из ее полей - дата \timestamp.
Я хотел бы использовать это поле, чтобы вернуть все записи, которые были обновлены за последние 5 минут.
Из-за того, что в Mongoose я не могу использовать метод Timestamp(), я понимаю, что мой единственный вариант - использовать следующий метод Javascript:
time : { type: Number, default: (new Date()).getTime() }
Вероятно, это не самый эффективный способ опроса обширной БД.
Я был бы очень признателен, если бы кто-то мог поделиться более эффективным способом реализации этого.
Есть ли способ реализовать это с помощью Mongoose и иметь возможность использовать отметку времени MongoDB?
Ответы
Ответ 1
Изменить - 20 марта 2016 г.
Mongoose теперь поддерживает временные метки для коллекций.
Пожалуйста, рассмотрите ответ @bobbyz ниже. Может быть, это то, что вы ищете.
Оригинальный ответ
Mongoose поддерживает тип Date
(который в основном является временной меткой):
time : { type : Date, default: Date.now }
Используя приведенное выше определение поля, каждый раз, когда вы сохраняете документ с неустановленным полем time
, Mongoose заполнит это поле текущим временем.
Источник: http://mongoosejs.com/docs/guide.html
Ответ 2
Текущая версия Mongoose (v4.x) имеет временную тиснение как встроенный параметр для схемы:
var mySchema = new mongoose.Schema( {name: String}, {timestamps: true} );
Эта опция добавляет свойства createdAt
и updatedAt
, отмеченные меткой Date
, и которая выполняет всю работу за вас. Каждый раз, когда вы обновляете документ, он обновляет свойство updatedAt
. "Временные отметки схемы" .
Ответ 3
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.
Ответ 4
В случае, если вы хотите, чтобы пользовательские имена для ваших созданных и обновленных на
const mongoose = require('mongoose');
const { Schema } = mongoose;
const schemaOptions = {
timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' },
};
const mySchema = new Schema({ name: String }, schemaOptions);
Ответ 5
Я хотел бы использовать это поле, чтобы вернуть все записи, которые были обновлены за последние 5 минут.
Это означает, что вам нужно обновлять дату до "сейчас" при каждом сохранении объекта. Возможно, вы найдете это полезным: Moongoose созданный с модификацией плагин
Ответ 6
Мне удалось реализовать время: {тип: Дата, по умолчанию: Date.now}, но дату, когда я открываю веб-страницу, она показывает: Дата заказа: сб 19 января 2019 03:27:36 GMT + 0000 (UTC). Как мне отделить его, чтобы показать только часть даты без времени в переднем конце: Дата заказа: сб 19 января 2019
Ответ 7
Во-первых: 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
Время в этом формате.