在 Mongoose 中插入新的重复记录时替换旧记录
Posted
技术标签:
【中文标题】在 Mongoose 中插入新的重复记录时替换旧记录【英文标题】:Replace old records while inserting new duplicate records in Mongoose 【发布时间】:2022-01-12 21:54:51 【问题描述】:mongoDB 集合:
db.collection.find()
_id:'...', emp: 'A', name: 'nameA', age: 23
_id:'...', emp: 'B', name: 'nameB', age: 54
_id:'...', emp: 'C', name: 'nameC', age: 45
集合中插入的数据:
_id:'...', emp: 'D', name: 'nameA', age: 22
_id:'...', emp: 'B', name: 'nameB1', age: 34
_id:'...', emp: 'A', name: 'nameA1', age: 47
_id:'...', emp: 'E', name: 'nameE', age: 23
重复的 emp 行的数据将被新添加的值替换。 在集合中插入新数据后的输出:
_id:'...', emp: 'A', name: 'nameA1', age: 47
_id:'...', emp: 'B', name: 'nameB1', age: 34
_id:'...', emp: 'C', name: 'nameC', age: 45
_id:'...', emp: 'D', name: 'nameD', age: 22
_id:'...', emp: 'E', name: 'nameE', age: 23
【问题讨论】:
问题是什么? 向集合中添加新记录时,重复的 emp 行值将被替换为新值。 所以我假设emp
字段不是唯一值,并且您希望有多个带有emp: 'A'
的对象而不是删除它们?当您对给定字段的约束有问题时,通常会发生删除。能否提供调用数据库插入新对象的函数?
我想用新的姓名和年龄值替换旧的 emp: 'A'。我正在使用基本的插入方法来插入新数据。
使用带有 upsert 选项的更新
【参考方案1】:
在更新选项中指定upsert: true
。
插入案例:
db.collection.update(
emp: "E"
,
$set:
name: "nameE",
age: 23
,
"$setOnInsert":
_id: 5,
emp: "E"
,
upsert: true
)
Mongo playground
更新案例:
db.collection.update(
emp: "A"
,
$set:
name: "nameA1",
age: 47
,
"$setOnInsert":
_id: 1,
emp: "A"
,
upsert: true
)
Mongo playground
【讨论】:
以上是关于在 Mongoose 中插入新的重复记录时替换旧记录的主要内容,如果未能解决你的问题,请参考以下文章
如何在 mongodb 中自动插入记录(nodejs、express、mongoose)