MongoDB Upsert

17 Mar 2025 | 4 分钟阅读

引言

在 MongoDB 中,upsert 是一种用于在任何操作中插入和更新值的方法。换句话说,MongoDB upsert 方法是插入和更新的组合(插入 + 更新 = upsert)。默认情况下,upsert 方法的值始终为 false。如果文档与指定的查询匹配,并且该方法的值设置为 true,则更新操作将更新匹配的文档。如果文档与指定的查询不匹配,并且该方法的值设置为 true,则此方法会在集合中插入一个新文档。这个新文档包含指示操作的字段。

语法

upsert 选项的值将为 true 或 false。

使用 findAndModify() 函数进行 Upsert

用户可以将 upsert 选项与 findAndModify() 函数结合使用。在此函数中,该选项的默认值为 false。如果此选项的值设置为 true,则该函数会执行以下操作之一

  1. 如果找到与给定查询条件匹配的文档,则 findAndModify() 函数会更新该文档。
  2. 如果未找到与给定查询条件匹配的文档,则 findAndModify() 函数会将新文档插入到集合中。

语法

例如

在本例中,我们正在使用



MongoDB upsert

现在,我们将通过将 upsert 选项设置为 true,在 student 集合中插入一个新文档。

这里,没有数据与名称 "jack" 匹配,因此 findAndModify() 函数会插入一个包含两个字段(即 "name" 和 "address")的新文档,因为 upsert 方法的值设置为 true。

MongoDB upsert

使用 update() 函数进行 Upsert

您可以将 upsert 选项与 update() 函数结合使用。在此函数中,该选项的默认值为 false。如果此选项的值设置为 true,则该函数会执行以下操作之一

  1. 如果找到与给定查询条件匹配的文档,则 update() 函数会更新该文档。
  2. 如果未找到与给定查询条件匹配的文档,则 update() 函数会将新文档插入到集合中。

语法

例如

在本例中,我们正在使用



MongoDB upsert

现在,我们将通过将 upsert 选项设置为 true,在 student 集合中插入一个新文档。

这里,没有数据与名称 "Noah" 匹配,因此 update() 函数会插入一个包含两个字段(即 "name" 和 "address")的新文档,因为 upsert 方法的值设置为 true。

MongoDB upsert

使用运算符表达式进行 Upsert

如果文档与给定的数据不匹配,并且 upsert 选项的值设置为 true,则更新操作会从给定查询参数中的相似性子句创建新文档,并应用来自更新参数的表达式。

例如

在本例中,我们正在使用



MongoDB upsert

现在,我们将通过将 upsert 选项的值设置为 true,在 Employees 集合中插入一个新文档。

这里,update() 方法使用来自查询条件的字段 "Name : Hnery" 创建一个新文档,然后将 $set 和 $setOnInsert 操作应用于此文档。

MongoDB upsert