如何更新MongoDB createdAt日期

时间:2018-09-13 20:54:12

标签: node.js mongodb date mongoose

我正在尝试将记录上自动添加的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保持不变。

2 个答案:

答案 0 :(得分:0)

猫鼬使用createdAt选项作为

填充了自动updatedAttimestamps字段
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);

答案 1 :(得分:0)

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

因为 createdAt 和 updatedAt 是 ISO 字符串。

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