Я создал модель posts в Mongoose, которая записывает все сообщения, созданные пользователями.

const mongoose = require('mongoose');
const { Schema } = mongoose;
const moment = require('moment')

const postSchema = new Schema({
userId:{
type:mongoose.Schema.Types.ObjectId,
required:[true, 'userId is required']
},
email:{
type:String,
required:[true, 'email is required']
},
userName:{
type:String,
required:[true, 'userName is required']
},
title:{
type:String,
required:[true, 'title is required']
},
url:{
type:String
},
body:{
type:String
},
createdAt:{
type:Date,
required:[true, 'createdAt is required'],
default: Date.now()
},
updatedAt:{
type:Date,
default: Date.now()
},
comments:{
type:Array,
default: []
},
views:{
type:Array,
default: []
},
points:{
type:Number,
default: 0
},
timeCreated:{
type:String,
default: moment().valueOf()
}

});

const Posts = mongoose.model('Posts', postSchema);
module.exports = Posts

Вот точная часть кода, с которой у меня возникают проблемы:

timeCreated:{
type:String,
default: moment().valueOf()
}

Я использую объект timeCreated для расчета времени во внешнем интерфейсе. Таким образом, когда пользователи создают сообщения, база данных будет указывать, что сообщения были созданы одновременно, даже если они были созданы с разницей в несколько часов.

См. Снимок базы данных (адреса электронной почты и имена пользователей поддельные):

database snapshot 1

database snapshot 1

Если присмотреться, объект timeCreated несет одно и то же строковое значение во всех 4 сообщениях, независимо от того, что сообщения были созданы с разницей в несколько часов. Что-то не так с моим кодом или это ошибка Mongoose / Moment js?

0
Comfort Sibanda 28 Фев 2021 в 13:14

1 ответ

Лучший ответ

У меня в приложении была аналогичная проблема, я сделал это, чтобы исправить. Я потерял ссылку, по которой была решена моя проблема.

timeCreated:{
     type:String,
     default: () => moment().valueOf()
}

PS: Я думаю, вам будет лучше использовать Javascript Date по умолчанию вместо moment, поскольку они сами просят переключиться на другую альтернативу. Прочтите здесь.

Что-то вроде этого.

timeCreated:{
     type:String,
     default: () => new Date()
}
1
Roshan Raj 28 Фев 2021 в 10:20