# 投影（Projection）

URL: https://caijiao.org/mongodb/03-query/02-projection
Source: docs/mongodb/03-query/02-projection.md
Description: 本章节介绍 MongoDB 查询中的投影（Projection）功能，用于控制查询结果中返回的字段，提高查询效率和数据安全性。

投影是 [MongoDB](/mongodb/) 查询中用于指定返回文档中哪些字段的功能。通过投影，可以只获取需要的字段，减少网络传输和客户端处理压力。

## 基本用法

在 `find()` 或 `findOne()` 方法中，第二个参数用来指定投影字段：

```js
db.users.find(
  { age: { $gt: 20 } },    // 查询条件
  { name: 1, email: 1 }    // 投影字段，1 表示显示该字段
)
````

上例只返回 `name` 和 `email` 字段，其他字段被排除。

## 排除字段

使用 `0` 可以排除指定字段：

```js
db.users.find(
  {},
  { password: 0 }
)
```

此查询返回所有文档，排除了 `password` 字段。

## 注意事项

* `_id` 字段默认总是返回，如果不想返回需显式排除：

  ```js
  db.users.find(
    {},
    { _id: 0, name: 1, email: 1 }
  )
  ```

* 投影字段的设置只能是全包含（1）或全排除（0），不能混用（除了 `_id` 除外）。

---

通过合理使用投影，用户可以优化查询性能，避免传输多余数据，同时提高数据安全性。
