Docs 菜单
Docs 主页
/ / /
Node.js
/ / /

在单个操作中插入或更新

在此页面上

  • Overview
  • 执行更新
  • 执行更新或插入

如果应用程序在MongoDB中存储和修改数据,则可能会使用插入和更新操作。 在某些工作流程中,您可能需要根据文档是否存在,在插入和更新之间进行选择。 在这些情况下,您可以使用以下方法中提供的 upsert选项来简化应用程序逻辑:

如果传递给这些方法的查询过滤器未找到任何匹配项,并且将 upsert 选项设置为 true,则 MongoDB 将插入更新文档。让我们来看一个例子。

假设您的应用程序跟踪食品卡车的当前位置,将最近的解决数据存储在类似于以下内容的MongoDB集合中:

[
{ name: "Haute Skillet", address: "42 Avenue B" },
{ name: "Lady of the Latke", address: "35 Fulton Rd" },
...
]

作为应用程序的一位用户,您得知一辆餐车改变了其日常停靠的位置,并希望应用此更新。此更新过程可能如下所示:

const query = { name: "Deli Llama" };
const update = { $set: { name: "Deli Llama", address: "3 Nassau St" }};
const options = {};
collection.updateOne(query, update, options);

如果存在名为“Deli Llama”的餐车,则上面的方法调用将更新集合中的文档。但是,如果集合中没有名为“Deli Llama”的餐车,则不会进行任何更改。

考虑这样一种情况:您想要添加有关该食品卡车的信息,即使它当前不在您的集合中。 我们不必先查询它是否存在来确定是否需要插入或更新文档,而是可以在调用updateOne()时将upsert设置为true ,如下所示:

const query = { name: "Deli Llama" };
const update = { $set: { name: "Deli Llama", address: "3 Nassau St" }};
const options = { upsert: true };
collection.updateOne(query, update, options);

运行上述操作后,无论此前您的集合中是否存在“Deli Llama”文档,您的集合都应类似于以下内容:

[
{ name: "Haute Skillet", address: "42 Avenue B" },
{ name: "Lady of the Latke", address: "35 Fulton Rd" },
{ name: "Deli Llama", address: "3 Nassau St" },
...
]
← 更新文档中的数组