# [AggregateCommand](AggregateCommand).indexOfCP(value: [Expression](/miniprogram/dev/wxcloudservice/wxcloud/reference-sdk-api/database/aggregate/Expression)[]): Object

> 支持端：[小程序 2.7.4](/miniprogram/dev/framework/client-lib/version.md), [云函数 0.8.1](/miniprogram/dev/wxcloudservice/wxcloud/reference/changelog-server-sdk), [Web](/miniprogram/dev/wxcloudservice/wxcloud/reference/changelog-web-sdk)

聚合操作符。在目标字符串中查找子字符串，并返回第一次出现的 `UTF-8` 的 `code point` 索引（从0开始）。如果不存在子字符串，返回 -1。

## 参数

### value: [Expression](/miniprogram/dev/wxcloudservice/wxcloud/reference-sdk-api/database/aggregate/Expression)[]

[<目标字符串表达式>, <子字符串表达式>, <开始位置表达式>, <结束位置表达式>]

## 返回值

### Object

## API 说明

`code point` 是“码位”，又名“编码位置”。这里特指 `Unicode` 包中的码位，范围是从0（16进制）到10FFFF（16进制）。

`indexOfCP` 的语法如下：

```javascript
db.command.aggregate.indexOfCP([, , , ])
```

下面是 4 种表达式的详细描述：

| 表达式 | 描述 |
| - | - |
| 目标字符串表达式 | 任何可以被解析为字符串的表达式 |
| 子字符串表达式 | 任何可以被解析为字符串的表达式 |
| 开始位置表达式 | 任何可以被解析为非负整数的表达式 |
| 结束位置表达式 | 任何可以被解析为非负整数的表达式 |

## 示例代码

假设集合 `students` 的记录如下：

```json
{ "firstName": "Yuanxin", "group": "a", "lastName": "Dong", "score": 84 }
{ "firstName": "Weijia", "group": "a", "lastName": "Wang", "score": 96 }
{ "firstName": "Chengxi", "group": "b", "lastName": "Li", "score": 80 }
```

借助 `indexOfCP` 查找字符 `"a"` 在字段 `firstName` 中的位置：

```javascript
const $ = db.command.aggregate
db
  .collection('students')
  .aggregate()
  .project({
    _id: 0,
    aStrIndex: $.indexOfCP(['$firstName', 'a'])
  })
  .end()
```

返回的结果如下：

```json
{ "aStrIndex": 2 }
{ "aStrIndex": 5 }
{ "aStrIndex": -1 }
```
