更新文档
此页面使用以下 mongo
shell方法:
此页面上的示例使用库存收集。 要创建和/或填充清单集合,请运行以下命令:
此页上的示例使用inventory集合。要创建和/或填充inventory集合,请运行以下操作:
更新集合中的文档
为了更新文档,MongoDB提供了更新操作符(例如$set
)来修改字段值。
要使用更新运算符,请将以下形式的更新文档传递给更新方法:
如果字段不存在,则某些更新操作符(例如$set
)将创建该字段。 有关详细信息,请参见各个更新操作员参考。
[success] Note
从MongoDB 4.2开始,MongoDB可以接受聚合管道来指定要进行的修改而不是更新文档。 有关详细信息,请参见方法参考页。
更新单个文档
下面的示例在inventory集合上使用db.collection.updateOne()
方法更新项目等于“ paper”的第一个文档:
更新操作:
使用
$set
运算符将size.uom字段的值更新为“ cm”,将状态字段的值更新为“ P”,使用
$currentDate
运算符将lastModified字段的值更新为当前日期。 如果lastModified字段不存在,则$currentDate
将创建该字段。 有关详细信息,请参见$currentDate
。
更新多个文档
3.2版中的新功能
以下示例在清单集合上使用db.collection.updateMany()
方法来更新数量小于50的所有文档:
更新操作:
使用
$set
运算符将size.uom字段的值更新为“ in”,将状态字段的值更新为“ P”.使用
$currentDate
运算符将lastModified字段的值更新为当前日期。如果lastModified字段不存在,则$currentDate
将创建该字段。有关详细信息,请参见$currentDate
。
更换文档
要替换**_id**字段以外的文档的全部内容,请将一个全新的文档作为第二个参数传递给db.collection.replaceOne()
。
当替换一个文档时,替换文档必须只包含字段/值对;即不包括更新操作符表达式。
替换文档可以具有与原始文档不同的字段。在替换文档中,由于**_id字段是不可变的,因此可以省略_id字段。但是,如果您确实包含_id**字段,则它必须与当前值具有相同的值。
下面的示例替换了inventory集合中的第一个文件,其中项为**"paper"**:
行为
原子性
MongoDB中的所有写操作都是单个文档级别上的原子操作。有关MongoDB和原子性的更多信息,请参见原子性和事务。
_id Field
设置后,您将无法更新**_id字段的值,也无法将现有文档替换为具有不同_id**字段值的替换文档。
字段顺序
除以下情况外,MongoDB会在执行写操作后保留文档字段的顺序:
_id字段始终是文档中的第一个字段。
包含字段名称
renaming
的更新可能导致文档中字段的重新排序。
增补选项
如果updateOne()
, updateMany()
, or replaceOne()
包含upsert:true,并且没有文档与指定的过滤器匹配,则该操作将创建一个新文档并将其插入。 如果存在匹配的文档,则该操作将修改或替换一个或多个匹配的文档。
有关创建的新文档的详细信息,请参见各个方法的参考页。
写确认书
对于写入问题,您可以指定从MongoDB请求的写入操作的确认级别。 有关详细信息,请参见写关注。
另请参考:
译者:杨帅
校对:杨帅
最后更新于