我在mongoose中有以下消息架构:
var messageSchema = mongoose.Schema({
userID: { type: ObjectId, required: true, ref: 'User' },
text: { type: String, required: true }
},
{
timestamps: true
});
无论如何都要忽略updatedAt时间戳?消息不会更新,因此updatedAt将浪费空间
答案 0 :(得分:20)
修改我修改了答案,以反映根据@JohnnyHK使用默认值的更好选项
您可以通过在模式中声明realm.delete(Dog.class)
(或任何您想要的名称)来自行处理:
createdAt
或者我们也可以在预保存挂钩中更新新文档的值:
mongoose.Schema({
created: { type: Date, default: Date.now }
...
沿着这些方向也是标志isNew,您可以使用它来检查文档是否是新文档。
messageSchema.pre('save', function (next) {
if (!this.created) this.created = new Date;
next();
})
答案 1 :(得分:13)
Mongoose v5甚至更好的是执行以下操作;
const schema = new Schema({
// Your schema...
}, {
timestamps: { createdAt: true, updatedAt: false }
})
答案 2 :(得分:1)
较旧的主题,但根据您的架构,可能会有更好的选择... 如果您坚持使用mongodb / mongoose auto-gen _id的默认设置,则已经内置了时间戳。如果只需要“创建”而不是“更新”,则只需使用...
document._id.getTimestamp();
从MongoDB文档中... ObjectId.getTimestamp()
还有这里... stackoverflow
答案 3 :(得分:0)
Mongoose 时间戳接口有这些可选字段。
interface SchemaTimestampsConfig {
createdAt?: boolean | string;
updatedAt?: boolean | string;
currentTime?: () => (Date | number);
}
我们可以为我们想要的字段传递布尔值(createdAt: true
和 updatedAt: true
将添加两个字段)。
我们可以使用 currentTime 函数来覆盖日期格式。
示例:
import mongoose from 'mongoose';
const { Schema } = mongoose;
const annotationType = ['NOTES', 'COMMENTS'];
const referenceType = ['TASKS', 'NOTES'];
const AnnotationSchema = new Schema(
{
sellerOrgId: {
type: String,
required: true,
},
createdById: {
type: String,
required: true,
},
annotationType: {
type: String,
enum: annotationType,
},
reference: {
id: { type: String, index: true },
type: {
type: String,
enum: referenceType,
},
},
data: Schema.Types.Mixed,
},
{ timestamps: { createdAt: true },
);
const AnnotationModel = mongoose.models.annotation || mongoose.model('annotation', AnnotationSchema);
export { AnnotationModel, AnnotationSchema };