使用猫鼬时间戳选项不会创建属性

Posted

技术标签:

【中文标题】使用猫鼬时间戳选项不会创建属性【英文标题】:Using mongoose timestamps option does not create properties 【发布时间】:2019-01-17 11:13:24 【问题描述】:

我可能遗漏了一些明显的东西,但已阅读文档。我有一个现有的集合。使用 Robo3T,我放弃了它。在我的脚本中,节点用完了,我定义了模式添加时间戳选项,如下所示。我运行我的应用程序。集合已创建。但是,当我通过 Robo 查看时,没有时间戳。其他一切都如我所料。创建索引。字段已填充。

我希望有两个额外的属性:createdAt 和 updatedAt。

我正在使用猫鼬 5.2.7。

    const categorySchema = mongoose.Schema(
        
            value: String,
            recordName: String,
            sourceId: Number,
            targetId: Number,
            requestParameters: Object,
            magentoResponse: Object
        ,
        
            autoIndex: true
        , 
        
            timestamps: true
        
    );

    categorySchema.index(sourceId: 1, unique: true);
    categorySchema.index(targetId: 1, recordName: 1, unique: true);

【问题讨论】:

【参考方案1】:

您是如何重新创建这些记录的?如果他们没有通过 mongoose(但通过 mongoDB 客户端/cli),他们将没有这些字段。这些是mongoose specific。

并在您创建新模型并保存时创建:

var thingSchema = new Schema(..,  timestamps:  createdAt: 'created_at'  );
var Thing = mongoose.model('Thing', thingSchema);
var thing = new Thing();
thing.save(); // `created_at` & `updatedAt` will be included

【讨论】:

【参考方案2】:

哦!我是个白痴。 autoIndex 和时间戳应该在同一个块中。我是个白痴!

应该是:

const categorySchema = mongoose.Schema(
    
        value: String,
        recordName: String,
        sourceId: Number,
        targetId: Number,
        requestParameters: Object,
        magentoResponse: Object
    ,
    
        autoIndex: true,
        timestamps: true
    
);

categorySchema.index(sourceId: 1, unique: true);
categorySchema.index(targetId: 1, recordName: 1, unique: true);

【讨论】:

以上是关于使用猫鼬时间戳选项不会创建属性的主要内容,如果未能解决你的问题,请参考以下文章

开玩笑期望猫鼬时间戳

索引猫鼬时间戳

如何在数据迁移期间使用 mongoose 设置 updatedAt 时间戳

使用 DataflowRunner 和 Dataflow 服务运行时,PubsubIO 不会将自定义时间戳属性输出为 context.timestamp

touch:命令创建文件

Signtool.exe /dg /ds /di 选项和时间戳