【问题标题】:How to update MongoDB createdAt date如何更新 MongoDB createdAt 日期
【发布时间】:2018-09-13 20:54:12
【问题描述】:

我正在尝试将记录上自动添加的 createdAt 日期更新为现在。

这里是我使用的代码:

Document.findOneAndUpdate({_id: docId}, {createdAt: new Date()}, function(err, updated) {});

它适用于我的开发环境,但不适用于服务器。它不返回错误,但不更新记录,只返回未更改的记录。

我尝试使用 new Date().toISOnew Date().toISOString() 或 .toGMTString() 对其进行格式化,但两者仍然只适用于开发环境。两者都有节点 6.10,但服务器有 mongo 3.4.4,开发有 mongo 3.2.10。

如果我添加另一个要更新的字段(第二个参数),该字段会更新得很好,但 createdAt 保持不变。

【问题讨论】:

    标签: node.js mongodb date mongoose


    【解决方案1】:

    自动createdAtupdatedAt 字段由猫鼬使用timestamps 选项填充

    const schema = new Schema({
      // Your schema...
    }, {
      timestamps: { createdAt: true, updatedAt: false }
    })
    

    如果您查看the source code,您会发现createdAt 被排除在更新之外。不过,相应地修改您的架构相当容易。

    const schema = mongoose.Schema({
      name: String,
      createdAt: { type: Date, default: Date.now }
    });
    
    const Test = mongoose.model('test', schema);
    
    const john = await Test.create({name: 'John Doe'});
    console.log(john);
    
    const updatedJohn = await Test.findOneAndUpdate({name: 'John Doe'}, { createdAt: Date.now() });
    console.log(updatedJohn);
    

    【讨论】:

    • 这是有道理的,尽管在将同一行添加到我的架构后它仍然无法更新(但现在将其移至结果的末尾)
    【解决方案2】:

    我不知道它是否适用于更新,但对于创建,我首先确保在我的数据库中启用 createdAt 字段,然后像这样设置 createdAt 字段: {createdAt: moment().toISOString()}

    因为 createdAt 和 updatedAt 是 ISO 字符串。

    编辑:就像 Nigel 提到的那样,我确实使用了矩库,但 new Date().toISOString() 给你同样的结果。

    【讨论】:

    猜你喜欢
    • 2022-01-04
    • 1970-01-01
    • 2021-01-20
    • 2019-04-02
    • 2021-06-26
    • 2019-06-28
    • 2019-03-10
    • 1970-01-01
    • 2022-11-29
    相关资源
    最近更新 更多