在使用 Node.js 并构建 MongoDB 应用程序时,Mongoose 是一个广泛使用的 ODM(对象文档映射)库。其中,两个常见的方法是 .save()
和 update()
。但是,这两种方法之间有什么区别呢?
.save() 方法
.save()
方法是将新的文档保存到数据库中或更新现有文档的简单方法。以下是一个例子:
const User = mongoose.model('User', { name: String }); const user = new User({ name: 'John Doe' }); user.save((err, savedUser) => { if (err) return console.error(err); console.log(savedUser); // { _id: 609d16f7a3e8b8704ca11124, name: 'John Doe', __v: 0 } });
但是,如果您打算更新现有文档,您需要首先检索该文档并对其进行更改,然后再调用 .save()
方法。
User.findOne({ name: 'John Doe' }, (err, user) => { if (err) return console.error(err); user.name = 'Jane Doe'; user.save((err, updatedUser) => { if (err) return console.error(err); console.log(updatedUser); // { _id: 609d16f7a3e8b8704ca11124, name: 'Jane Doe', __v: 0 } }); });
请注意,这里使用了回调函数来处理错误和结果。在实际应用中,您可能希望使用 Promise 或 async/await 更好地处理这些操作。但是,在这个例子中,我们将保持简单。
update() 方法
.update()
方法允许您在一次查询中更新多个文档。以下是一个例子:
User.update({ name: 'John Doe' }, { name: 'Jane Doe' }, (err, raw) => { if (err) return console.error(err); console.log(raw); // { n: 1, nModified: 1, ok: 1 } });
这里,我们将所有名字为“John Doe”的用户的名称更改为“Jane Doe”。请注意,您需要传递两个参数作为筛选器和要执行的更改。此外,该方法仅返回有关执行操作的少量信息。
如果希望获得更新的实际文档,请改用新的 .findOneAndUpdate()
或 .updateOne()
等方法(因为 .update()
已被废弃):
User.findOneAndUpdate({ name: 'John Doe' }, { name: 'Jane Doe' }, { new: true }, (err, updatedUser) => { if (err) return console.error(err); console.log(updatedUser); // { _id: 609d16f7a3e8b8704ca11124, name: 'Jane Doe', __v: 0 } });
在这个例子中,我们使用了 .findOneAndUpdate()
方法,并将 new
选项设置为 true
,以便返回实际更新后的文档。
区别
.save()
方法用于保存新文档或更新现有文档。.update()
方法仅在查询结果中更改多个文档,只返回有关操作执行情况的少量信息。- 当您需要更新单个文档时,应使用
.findOneAndUpdate()
或.updateOne()
等方法。
结论
在本文中,我们已经介绍了 Mongoose 中两种常见的方法:.save()
和 update()
。虽然它们都可以用于更新文档,但它们之间存在一些区别。.save()
方法用于保存新文档或更新现有文档。.update()
方法用于在查询结果中更改多个文档,并只返回有关操作执行情况的少量信息。当您需要更新单个文档时,应使用 .findOneAndUpdate()
或 .updateOne()
等方法。
尽管这些方法是相
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/30902