如何使用Mongoose和Node.js更新整个集合?
解决MongoDB集合全量替换文档的问题
问题描述
我有一个drafts集合,通过以下代码获取了所有文档:
let drafts = await Drafts.find();
现在我创建了新的文档集合newDrafts,想要用它替换旧集合里的所有文档。尝试执行await drafts.updateMany(newDrafts)未成功,执行以下代码也无效:
drafts = newDrafts; await drafts.save()
解决方案
要实现全量替换集合中的文档,正确的做法是先清空旧文档,再插入新文档:
// 1. 删除集合中所有旧文档 await Drafts.deleteMany({}); // 2. 插入新的文档数组 await Drafts.insertMany(newDrafts);
为什么之前的方法无效
Drafts.find()返回的是文档数组,不是MongoDB的Query对象,数组本身没有updateMany方法。updateMany是Model的专属方法,调用时需要传入查询条件和更新规则,不能直接传文档数组。drafts = newDrafts只是修改了变量的引用,和数据库中的数据没有任何关联;而且数组对象不存在save()方法,save()是单个MongoDB文档实例的方法。
内容的提问来源于stack exchange,提问作者Calin Onaca
相关产品推荐
相关产品推荐

