Как создать поле даты со значением по умолчанию в качестве текущей метки времени в MongoDb?
Как создать поле даты со значением по умолчанию, значение по умолчанию должно быть текущим временным интервалом всякий раз, когда вложение происходило в коллекции.
Ответы
Ответ 1
Это довольно просто! Например, когда вы используете Mongoose, вы можете передавать функции в качестве значения по умолчанию. Затем Mongoose вызывает функцию для каждой вставки.
Итак, в вашей схеме вы бы сделали что-то вроде:
{
timestamp: { type: Date, default: Date.now},
...
}
Не забудьте только передать объект функции Date.now
а не значение функции call Date.now()
как это приведет к тому, что значение даты будет только для значения, когда ваша схема была создана.
Это решение применимо к Mongoose & Node.Js, и я надеюсь, что это ваш usecase, потому что вы не уточнили это более точно.
Ответ 2
Используйте _id, чтобы получить метку времени.
Для этой конкретной цели вам не нужно создавать явное поле для сохранения временных отметок. Идентификатор объекта, т.е. "_id"
, который монго создает по умолчанию, может использоваться для этой цели, таким образом, экономя вам дополнительное избыточное пространство. Я предполагаю, что вы используете node.js, чтобы вы могли сделать что-то вроде следующего, чтобы получить время создания конкретного документа:
let ObjectId = require('mongodb').ObjectID
let docObjID = new ObjectId(<Your document _id>)
console.log(docObjID.getTimestamp())
И если вы используете что-то вроде мангуста, сделайте это следующим образом:
let mongoose = require('mongoose')
let docObjID = mongoose.Types.ObjectId(<Your document _id>)
console.log(docObjID.getTimestamp())
Подробнее о "_id" здесь.
Ответ 3
Вы просто сделали бы это, вставляя... для текущей timestamp
.
collection.insert({ "date": datetime.now() }
Ответ 4
При создании документа отметки времени являются одним из немногих настраиваемых параметров, которые можно передать конструктору или установить напрямую.
const exampleSchema = new Schema({...}, { timestamps: true });
После этого mongoose назначает поля созданного и обновленного атрибута вашей схеме, назначенный тип - Дата.
Ответ 5
Я просто хочу указать, что если вы хотите сохранить временную метку в виде целого числа вместо формата даты, вы можете сделать это:
{
timestamp: { type: Number, default: Date.now},
...
}
Ответ 6
Здесь команда, которая не устанавливает значение по умолчанию, но вставляет объект с текущей меткой времени:
db.foo.insert({date: new ISODate()});
Они имеют такой же эффект:
db.foo.insert({date: ISODate()});
db.foo.insert({date: new Date()});
Имейте в ISODate
, что Date()
без new
будет другим - он не возвращает объект ISODate
, а строку.
Кроме того, они используют время клиента, а не время сервера, которое может быть другим (поскольку установка времени никогда не на 100% точнее).
Ответ 7
Спасибо друзьям.. Я нашел другой способ получить timestamp из поля _id. objectid.gettimestamp() из этого мы можем получить его штамп времени.
Ответ 8
Это немного старо, но я использую метод Date.now(), он не получает текущую дату и время, он застревает во время запуска вашего процесса узла. Таким образом, все временные метки будут установлены по умолчанию на Date.now(), когда вы запустили свой сервер. Один из способов, которым я работал, заключался в следующем:
ExampleSchema.pre('save', function (next) {
const instanceOfSchema = this;
if(!instanceOfSchema.created_at){
instanceOfSchema.created_at = Date.now();
}
instanceOfSchema.updated_at = Date.now();
next();
})
Ответ 9
Давайте рассмотрим пользовательскую схему, в которой мы используем дату создания, мы можем использовать схему mongoose и передать значение по умолчанию как Date.now
var UserSchema = new Schema({
name: {type: String, trim: true},
created: {type: Date, default: Date.now}
});
Если мы хотим сохранить временную метку вместо номера, тогда используйте номер вместо номера, подобного этому
var UserSchema = new Schema({
name: {type: String, trim: true},
created: {type: Number, default: Date.now}
});
Примечание: - Когда мы используем Date.now() в параметре по умолчанию, это будет установите в качестве даты один раз значение, когда ваша схема была создана, поэтому вы найдете даты такие же, как в другом документе. Лучше использовать Date.now вместо Date.now().