我正在尝试将记录上自动添加的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保持不变。
答案 0 :(得分:0)
猫鼬使用createdAt
选项作为
updatedAt
和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);
答案 1 :(得分:0)
我不知道它是否适用于更新,但对于创建,我首先确保在我的数据库中启用了 createdAt 字段,然后像这样设置 createdAt 字段:
{createdAt: moment().toISOString()}
因为 createdAt 和 updatedAt 是 ISO 字符串。
编辑:就像 Nigel 提到的那样,我确实使用了矩库,但 new Date().toISOString()
给了你同样的结果。