使用 Mongoose 插入文档
在 MongoDB 中,一个 upsert 意味着如果没有文档匹配则插入一个新文档的更新。 filter
要在 Mongoose 中插入文档,您应该设置 upsert
选项 Model.updateOne()
功能 :
const res = await Character.updateOne(
{ name: 'Jean-Luc Picard' },
{ $set: { age: 59 } },
{ upsert: true } // Make this update into an upsert
);
// Will be 1 if MongoDB modified an existing document, or 0
// if MongoDB inserted a new document.
res.nModified;
// Contains an array of descriptions of the documents inserted,
// including the `_id` of all inserted docs.
res.upserted;
要获取插入的文档,您应该使用 Model.findOneAndUpdate()
函数 代替 Model.updateOne()
。
const doc = await Character.findOneAndUpdate(
{ name: 'Jean-Luc Picard' },
{ $set: { age: 59 } },
{ upsert: true, new: true }
);
doc.name; // 'Jean-Luc Picard'
doc.age; // 59
Mongoose 最多会插入一个文档。 即使你使用 Model.updateMany()
和 upsert
,Mongoose 最多会插入一个文档。 要批量更新多个文档,您应该 使用 Model.bulkWrite()
功能 。
const res = await Character.bulkWrite([
{
updateOne: {
filter: { name: 'Will Riker' },
update: { age: 29 },
upsert: true
}
},
{
updateOne: {
filter: { name: 'Geordi La Forge' },
update: { age: 29 },
upsert: true
}
}
]);
// Contains the number of documents that were inserted because
// of an upsert
res.upsertedCount;
// Contains the number of existing documents that were updated.
res.modifiedCount;
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论