#### 20.3.3.4 修改文档

[](<>)

您可以使用`调整（）`方法来更新集合中的一个或多个文档。X DevAPI 提供了与`调整（）`方法：

-   在文档中设置和取消设置字段。

-   追加、插入和删除数组。

-   对要修改的文档进行绑定、限制和排序。

##### 设置和取消设置文档字段

[](<>)

这`调整（）`方法通过过滤集合以仅包含要修改的文档，然后将您指定的操作应用于这些文档来工作。

在以下示例中，`调整（）`方法使用搜索条件识别要更改的文档，然后`放（）`方法替换嵌套人口统计对象中的两个值。

```
mysql-js> db.countryinfo.modify("Code = 'SEA'").set(
"demographics", {"LifeExpectancy": 78, "Population": 28})
```

修改文档后，使用`找（）`方法来验证更改。

要从文档中删除内容，请使用`调整（）`和`未设置（）`方法。例如，以下查询从与搜索条件匹配的文档中删除 GNP。

```
mysql-js> db.countryinfo.modify("Name = 'Sealand'").unset("GNP")
```

使用`找（）`方法来验证更改。

```
mysql-js> db.countryinfo.find("Name = 'Sealand'")
{
    "_id": "00005e2ff4af00000000000000f4",
    "Name": "Sealand",
    "Code:": "SEA",
    "IndepYear": 1967,
    "geography": {
        "Region": "British Islands",
        "Continent": "Europe",
        "SurfaceArea": 193
    },
    "government": {
        "HeadOfState": "Michael Bates",
        "GovernmentForm": "Monarchy"
    },
    "demographics": {
        "Population": 27,
        "LifeExpectancy": 79
    }
}
```

##### 追加、插入和删除数组

[](<>)

要将元素附加到数组字段，或者在数组中插入或删除元素，请使用`数组追加（）`,`数组插入（）`， 要么`数组删除（）`方法。以下示例修改`国家信息`收集以跟踪国际机场。

第一个示例使用`调整（）`和`放（）`在所有文档中创建新 Airports 字段的方法。

警告

在未指定搜索条件的情况下修改文档时要小心；这样做会修改集合中的所有文档。

```
mysql-js> db.countryinfo.modify("true").set("Airports", [])
```

添加 Airports 字段后，下一个示例使用`数组追加（）`将新机场添加到其中一个文件的方法。*$.机场*在以下示例中表示当前文档的 Airports 字段。

```
mysql-js> db.countryinfo.modify("Name = 'France'").arrayAppend("$.Airports", "ORY")
```

采用`找（）`看到变化。

```
mysql-js> db.countryinfo.find("Name = 'France'")
{
    "GNP": 1424285,
    "_id": "00005de917d80000000000000048",
    "Code": "FRA",
    "Name": "France",
    "Airports": [
        "ORY"
    ],
    "IndepYear": 843,
    "geography": {
        "Region": "Western Europe",
        "Continent": "Europe",
        "SurfaceArea": 551500
    },
    "government": {
        "HeadOfState": "Jacques Chirac",
        "GovernmentForm": "Republic"
    },
    "demographics": {
        "Population": 59225700,
        "LifeExpectancy": 78.80000305175781
    }
}
```

要在数组中的不同位置插入元素，请使用`数组插入（）`方法来指定在路径表达式中插入哪个索引。在这种情况下，索引为 0，即数组中的第一个元素。

```
mysql-js> db.countryinfo.modify("Name = 'France'").arrayInsert("$.Airports[0]", "CDG")
```

要从数组中删除一个元素，您必须传递给`数组删除（）`method 要删除的元素的索引。

```
mysql-js> db.countryinfo.modify("Name = 'France'").arrayDelete("$.Airports[1]")
```

##### 相关信息

-   这[MySQL 参考手册](json.html#json-paths)提供帮助您搜索和修改 JSON 值的说明。

-   看[集合修改函数](https://dev.mysql.com/doc/x-devapi-userguide/en/crud-ebnf-collection-crud-functions.html#crud-ebnf-collectionmodifyfunction)完整的语法定义。
