如何基于update时间实现文档存在则更新、不存在则创建逻辑?
实现MongoDB文档的“存在则更新(按时间判断)、不存在则创建”逻辑
你构思的逻辑是对的:通过_id检测本地集合中是否存在对应文档,不存在则直接创建;存在则对比外部文档与本地文档的update时间,仅当外部文档更新时间更新时才执行覆盖更新。
以下是完善后的可运行代码:
const documentExist = await db.collection.findById(doc._id); if (documentExist) { // 对比两个文档的update时间戳 const isLocalNewerOrEqual = documentExist.update.getTime() >= doc.update.getTime(); if (!isLocalNewerOrEqual) { // 用外部文档覆盖本地文档,保留原_id await db.collection.findByIdAndUpdate( doc._id, { $set: doc }, { new: true } // 返回更新后的文档(可选) ); } } else { // 本地无对应文档,直接创建,保留外部文档的_id await db.collection.create(doc); // 或者用你原型里的方式: // const newDoc = new db.collection(doc); // await newDoc.save(); }
关键细节说明:
- 时间对比逻辑:用
>=替代===,这样如果本地文档更新时间和外部一致,也不会重复更新,避免无意义操作。 - 更新操作:使用
findByIdAndUpdate是更简洁的方式,直接通过_id定位并更新;也可以选择修改documentExist对象后调用save(),效果一致:Object.assign(documentExist, doc); await documentExist.save(); - 保留
_id:创建时直接传入包含_id的doc对象,MongoDB会使用该_id而非自动生成。
内容的提问来源于stack exchange,提问作者user21188932
相关产品推荐
相关产品推荐

