Docs 菜单
Docs 主页
/ / /
Node.js 驱动程序
/ / /

修改文档

在此页面上

  • Overview
  • Update Documents
  • 替换文档

您可以使用更新替换操作来修改 MongoDB 集合中的文档。更新操作可以修改文档的字段和值,同时保持其他字段和值不变。替换操作使用指定字段和值替换现有文档中的所有字段和值,同时保持 _id 字段值不变。

Node.js 驱动程序提供以下用于更改文档的方法:

  • updateOne()

  • updateMany()

  • replaceOne()

提示

互动实验室

本页包括一个简短的交互式实验室,演示了如何使用 updateMany() 方法修改数据。无需安装 MongoDB 或代码编辑器,即可直接在浏览器窗口中完成此实验。

若要启动实验室,请单击页面顶部的“Open Interactive Tutorial”按钮。要将实验室扩展为全屏格式,请单击实验室窗格右上角的全屏按钮 ()。

如需对一个或多个文档执行更新,请创建更新文档,指定更新操作符(要执行的更新类型)以及描述更改的字段和值。更新文档使用以下格式:

{
<update operator>: {
<field> : {
...
},
<field> : {
}
},
<update operator>: {
...
}
}

更新文档的顶层包含以下一个或多个更新运算符:

  • $set:用指定值替换字段的值

  • $inc:递增或递减字段值

  • $rename:重命名字段

  • $unset:删除字段

  • $mul:将字段值乘以指定的数值

有关更新操作符及其用法完整列表,请参阅 MongoDB Server 手册。

更新操作符只适用于更新文档中与之关联的字段。

注意

更新操作中的聚合管道

如果您使用的是 MongoDB 4.2或更高版本,则可以在更新操作中使用由聚合阶段子集组成的聚合管道。 有关 MongoDB 在更新操作中使用的聚合管道中支持的聚合阶段的更多信息,请参阅有关使用聚合管道构建更新的教程。

myDB.items 集合中的文档为例,其中包含描述待售商品、价格和可用数量的字段:

{
_id: 465,
item: "Hand-thrown ceramic plate",
price: 32.50,
quantity: 7,
}

如果应用 $set 更新运算符,并为 quantity 添加新值,则可以使用以下更新文档:

const myDB = client.db("myDB");
const myColl = myDB.collection("items");
const filter = { _id: 465 };
// update the value of the 'quantity' field to 5
const updateDocument = {
$set: {
quantity: 5,
},
};
const result = await myColl.updateOne(filter, updateDocument);

更新后的文档类似以下内容,其中 quantity 字段的值已更新,而所有其他值则保持不变:

{
_id: 465,
item: "Hand-thrown ceramic plate",
price: 32.50,
quantity: 5,
}

如果更新操作无法匹配集合中的任何文档,则不会进行任何更改。 更新操作可以配置为执行更新或插入(upsert)或插入,该操作尝试执行更新,但如果没有匹配的文档,则插入具有指定字段和值的新文档。

您不能修改文档的_id字段,也不能将字段更改为违反唯一索引约束的值。 有关唯一索引的更多信息,请参阅 MongoDB Server 手册。

要执行替换操作,请创建替换文档,其中包含要在替换操作中使用的字段和值。 替换文档使用以下格式:

{
<field>: {
<value>
},
<field>: {
...
}
}

替换文档是要取代与查询筛选器匹配的现有文档的文档。

myDB.items 集合中的文档为例,其中包含描述待售商品、价格和可用数量的字段:

{
_id: 501,
item: "3-wick beeswax candle",
price: 18.99,
quantity: 10,
}

假设您想要将此文档替换为包含完全不同项目的描述的文档。您的替换操作可能如下所示:

const myDB = client.db("myDB");
const myColl = myDB.collection("items");
const filter = { _id: 501 };
// replace the matched document with the replacement document
const replacementDocument = {
item: "Vintage silver flatware set",
price: 79.15,
quantity: 1,
};
const result = await myColl.replaceOne(filter, replacementDocument);

被替换文档包含替换文档的内容和不可变的 _id 字段,具体如下:

{
_id: 501,
item: "Vintage silver flatware set",
price: 79.15,
quantity: 1,
}

如果替换操作无法与集合中的任何文档匹配,则不会进行任何更改。替换操作可以配置为执行更新或插入,尝试执行替换,但如果没有匹配的文档,则会插入具有指定字段和值的新文档。

您不能修改文档的_id字段,也不能将字段更改为违反唯一索引约束的值。 有关唯一索引的更多信息,请参阅 MongoDB Server 手册。

后退

删除