如何为MongoDB现有文档添加基于内部date字段的timestamp?
给现有MongoDB文档批量设置createdAt字段
完全可以实现你的需求,通过批量更新操作就能把每个文档的createdAt字段值设为自身已有的date字段值,下面是具体操作方法:
1. MongoDB Shell 原生操作
直接用MongoDB Shell执行的话,需要用updateMany配合聚合管道(只有聚合管道更新才能引用当前文档的字段值):
db.reviews.updateMany( {}, // 匹配所有文档 [ { $set: { createdAt: "$date" } } // 将当前文档的date字段值赋值给createdAt ] );
2. Mongoose 操作(对应你的Review模型)
如果用Mongoose操作,写法类似,同样要使用聚合管道形式的更新:
await Review.updateMany( {}, // 匹配所有文档 [ { $set: { createdAt: "$date" } } ] );
注意:你示例里的写法没法实现字段间赋值,普通的
$set更新不能引用当前文档的字段,必须用聚合管道的方式才行。
补充说明:
- 执行完这次批量更新后,后续新建的文档会自动由Mongoose的timestamp功能生成
createdAt和updatedAt字段。 - 你的数据量只有约1000条,这个操作会很快完成,不用担心性能问题。
内容的提问来源于stack exchange,提问作者ytpm
相关产品推荐
相关产品推荐

