在单个操作中插入或更新
此版本的文档已存档,不再提供支持。 查看最新文档,了解如何升级您的 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" }, ... ]