Как создать поле даты со значением по умолчанию в качестве текущей метки времени в 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().