【发布时间】:2021-06-03 22:52:46
【问题描述】:
如何在不存在的情况下在 mongoose 中插入文档而不更新现有文档(如果它已经存在)?我知道如果我执行 upsert,它会尝试更新(如果存在)并插入新文档(如果不存在)。但是,我的情况是我只想插入一个新文档(如果不存在)并保留现有文档而不更新它。
【问题讨论】:
如何在不存在的情况下在 mongoose 中插入文档而不更新现有文档(如果它已经存在)?我知道如果我执行 upsert,它会尝试更新(如果存在)并插入新文档(如果不存在)。但是,我的情况是我只想插入一个新文档(如果不存在)并保留现有文档而不更新它。
【问题讨论】:
你是在正确的方式。
您应该在update 方法中使用仍然使用upsert,但也应该使用$setOnInsert 运算符。请阅读此运算符here。
简而言之,使用此运算符允许您仅在导致插入新文档时执行操作。在其他情况下,它会简单地跳过。
是的,你当然可以将它与猫鼬一起使用:
YourModel.update(
{ queryField: 1 }, // query
{ $setOnInsert: { ...newDocument }}, // new doc fields
{ upsert: true } // still use upsert option
);
【讨论】: