MongoDB更新
MongoDB更新用于更新集合中的文档。
在上一教程中,我们了解了如何使用Mongo Shell和Java驱动程序插入MongoDB。
今天,我们将研究MongoDB更新以及Mongo Shell和Java驱动程序提供的不同选项。
MongoDB更新
MongoDB Shell客户端更新语法为:
db.collection.update( <query>, <update>, { upsert: <boolean>, multi: <boolean>, writeConcern: <document> } )
MongoDB更新中的第一个参数是查询,该查询为我们提供了目标行–例如," {country:" USA"}""用于获取国家/地区为美国的所有文档,以及" {country:{$ne:" USA"}}}"国家/地区不是美国的所有文件。
MongoDB更新中的第二个参数用于定义要更新的字段列表,例如,我们可以使用{{name:" hyman Updated"}}"来更新名称。
MongoDB更新中的其他选项是可选的,但也很重要。
如果将upsert指定为true,则更新查询将在查询不匹配的情况下插入文档,默认值为false。
如果将multi指定为true,则将更新所有符合查询条件的文档,默认值为false。
writeConcern可用于指定写关注,如果未提供,将使用默认写关注。
MongoDB更新文档运算符
我们有许多mongo更新参数运算符可用-最广泛使用的是$set,$inc,$currentDate。
Name | Description |
---|---|
$inc | Increments the value of the field by the specified amount. |
$mul | Multiplies the value of the field by the specified amount. |
$rename | Renames a field. |
$setOnInsert | Sets the value of a field upon document creation during an upsert. Has no effect on update operations that modify existing documents. |
$set | Sets the value of a field in a document. |
$unset | Removes the specified field from a document. |
$min | Only updates the field if the specified value is less than the existing field value. |
$max | Only updates the field if the specified value is greater than the existing field value. |
$currentDate | Sets the value of a field to current date, either as a Date or a Timestamp. |
我们将在下一部分中研究其中的一些。
MongoDB更新操作要注意的几个要点是:
如果<update>文档包含更新运算符,则它必须仅包含更新运算符表达式,并且仅将更新相应的字段。
如果<update>文档仅包含field:value表达式,则它将替换查询匹配的文档(_id除外),并且我们不能以此来更新多个文档(有意义的是,它将具有重复的数据)。
如果upsert为true,并且没有文档符合查询条件,则update()将插入一个文档。
更新将使用以下内容创建新文档:<update>参数的字段和值,或者<query>和<update>参数的字段和值(如果<update>参数仅包含更新运算符表达式)。
此更新通过<query>参数中的相等子句创建一个基础文档,然后从<update>参数中应用更新表达式。
MongoDB更新文档示例
现在,让我们来看一些使用Mongo Shell的MongoDB更新示例。
MongoDB更新单个文档中的单个字段
请注意,我使用的是$set运算符来更新字段值,如果不使用它将替换整个文档,如下所示。
我们可以使用它来替换特定文档中的所有字段。MongoDB更新多个字段注意$set与JSON数据一起使用,因此,如果要设置多个字段,则可以将它们作为JSON传递。
MongoDB更新–添加新字段我们也可以使用$set操作符向文档添加新字段,如下所示。
MongoDB更新子文档我们可以使用mongo更新点运算符来更新MongoDB子文档中的值,这与Java语法非常相似,用于访问方法和变量。
注意密钥使用了双引号,如果不使用双引号/单引号,它将抛出错误消息为" SyntaxError:Unexpected token。
"。
MongoDB更新–删除字段我们可以使用MongoDB更新$unset运算符从文档中删除字段。
MongoDB更新–如果找不到匹配项,请插入新文档
MongoDB更新多个文档
上面的update()方法为薪水少于9000的每个文档增加了薪水1000。
使用Java驱动程序的MongoDB更新文档示例
我们使用Mongo Shell研究了不同的MongoDB文档更新示例。
现在,让我们来看一些使用MongoDB Java驱动程序的示例。
MongoDB Update Java驱动程序–在单个文档中更新单列下面的程序向您展示如何在Java程序中使用$set来确保要更新单个匹配的文档。
为简单起见,将更新前后的测试数据作为注释添加到程序中MongoDBUpdateExample.javaMongoDB更新Java驱动程序–更新多个列我们可以在MongoDB更新文档中添加多个字段以更新单个文档中的多个列。
MongoDB更新Java驱动程序–在单个文档中添加新字段同样,我们可以使用$set通过更新查询在MongoDB文档中添加新字段。
MongoDB更新Java驱动程序–更新子文档就像shell命令一样,我们可以使用带$set的点运算符来使用更新查询来更新子文档。
MongoDB更新Java驱动程序–删除字段我们使用$unset update选项从MongoDB文档中删除字段,我们也可以从子文档中删除字段。
MongoDB Update Java驱动程序–如果未找到匹配项,则插入新文档为此我们需要将upsert参数值传递为true,如下所示。
MongoDB更新Java驱动程序–更新多个文档MongoDB Java驱动程序API提供了updateMulti方法,可用于更新多个文档,在下面的示例中,我们将所有文档工资更新为1000,小于9000。