# 内容操作

\#内容库操作

### 获取内容库列表

`wx.BaaS.ContentGroup.find(options)`

**参数说明**

opions:

| 参数        | 类型      | 必填 | 默认    | 说明                |
| --------- | ------- | -- | ----- | ----------------- |
| withCount | boolean | 否  | false | 是否返回 total\_count |
| offset    | number  | 否  | 0     | 偏移量               |
| limit     | number  | 否  | 20    | 最大返回条数            |

**请求示例**

```js
wx.BaaS.ContentGroup.find({withCount: true, offset: 0, limit: 20}).then(res => {
  // success
}, err => {
  // err
})
```

**返回示例**

res.data:

```js
{
  meta: {
    limit: 20,
    offset: 0,
    total_count: 1,
    next: null,
    previous: null,
  },
  objects: [{
    id: 1234567890,
    name: '测试内容库',
  }],
}
```

### 获取内容库详情

`wx.BaaS.ContentGroup.get(contentGroupID)`

**参数说明**

| 参数             | 类型     | 必填 | 说明     |
| -------------- | ------ | -- | ------ |
| contentGroupID | Number | 是  | 内容库 ID |

**请求示例**

```js
let contentGroupID = 1513076211190694

wx.BaaS.ContentGroup.get(contentGroupID).then(res => {
  // success
}, err => {
  // err
})
```

**返回示例**

res.data:

```js
{
  id: 1234567890,
  name: '测试内容库',
}
```

## 内容操作

以下操作都需指明操作的内容库，方法如下：

`let MyContentGroup = new wx.BaaS.ContentGroup(contentGroupID)`

**参数说明**

| 参数             | 类型     | 必填 | 说明     |
| -------------- | ------ | -- | ------ |
| contentGroupID | Number | 是  | 内容库 ID |

### 获取内容详情

`MyContentGroup.getContent(richTextID)`

**参数说明**

| 参数名        | 类型     | 必填 | 说明    |
| ---------- | ------ | -- | ----- |
| richTextID | Number | 是  | 内容 ID |

**返回参数**

| 参数           | 类型           | 说明      |
| ------------ | ------------ | ------- |
| categories   | Number Array | 内容分类    |
| content      | String       | 内容详情    |
| cover        | String       | 封面图 url |
| created\_at  | Number       | 创建时间    |
| created\_by  | Number       | user ID |
| description  | String       | 摘要      |
| group\_id    | Number       | 内容库 ID  |
| id           | Number       | 内容 ID   |
| title        | String       | 内容标题    |
| update\_at   | Number       | 更新时间    |
| visit\_count | Number       | 文章阅读数   |

> **info** 如果有自定义字段，则一并返回。

> visit\_count 字段，只有在已经开通了\[“文章统计”（“阅读数支持”）功能]\(<https://cloud.minapp.com/dashboard/#/app/\\[\\[app\\_id> | addSlashPostfixIfNotEmpty]]settings/info/)，且该文章的阅读数大于 0 时，才会返回。

> “文章阅读数统计”是一个异步的操作，统计结果略有延迟。

**请求示例**

```js
let contentGroupID = 1513076211190694
let richTextID = 1514529306082815

let MyContentGroup = new wx.BaaS.ContentGroup(contentGroupID)
MyContentGroup.getContent(richTextID).then(res => {
  // success
}, err => {
  // err
})
```

**返回示例**

res.data:

```js
{
  categories: [1513076252710475],
  content: "<p>\b 该片讲述了伊娅不满父亲的恶作剧</p>",
  cover: "https://cloud-minapp-1131.cloud.ifanrusercontent.com/1donykIpnuvcRiAX.jpg",
  created_at: 1513076305,
  created_by: 16042162,
  description: "iphoneX 发布",
  group_id: 1513076211190694,
  id: 1513076305938456,
  title: "iphone X",
  updated_at: 1513076364,
  visit_count: 10
}
```

### 获取符合筛选条件的内容总数

`MyContentGroup.count()`

> **info** SDK v3.0 新增

```js
let query = new wx.BaaS.Query()
query.arrayContains('categories', [1513076252710475])
MyContentGroup.setQuery(query).count().then(num => {
  // success
  console.log(num)  // 10
}, err => {
  // err
})
```

### 查询，获取内容列表

`MyContentGroup.find(options)`

**参数说明**

options:

| 参数        | 类型      | 必填 | 默认      | 说明                |
| --------- | ------- | -- | ------- | ----------------- |
| withCount | boolean | 否  | `false` | 是否返回 total\_count |

{{totalCount.withCountTips()}}

内容查询与[数据表查询](/baas-js-sdk/js-sdk/schema/query.md)方法一致。

> **info** `MyContentGroup.find()` 接口返回的内容中，不包含 `content` 字段。

**请求示例**

```js
// 查找该内容库下的所有内容
MyContentGroup.find().then()

// 查找该内容库下在指定分类下的内容
let query = new wx.BaaS.Query()
query.arrayContains('categories', [1513076252710475])
MyContentGroup.setQuery(query).find().then(res => {
  // success
}, err => {
  // err
})
```

#### 筛选字段

select 使用方法可以参考[数据表 - 字段过滤](/baas-js-sdk/js-sdk/schema/select-and-expand.md)小节

#### 扩展字段

expand 使用方法可以参考[数据表 - 字段扩展](/baas-js-sdk/js-sdk/schema/select-and-expand.md)小节

假设 \_richtextcontent 表中有一个类型为 pointer 的字段，名称为 `pointer_test_oder`, 指向了 test\_order 表

**请求示例 1**

```js
MyContentGroup.select(['-title']).expand('pointer_test_oder').getContent(1513076305938456).then(res => {
  // success
}, err => {
  // err
})
```

**请求结果 1**

```json
{
  "statusCode": 200,
  "data": {
    "categories": [
      1513076252710475
    ],
    "cover": "https://cloud-minapp-1131.cloud.ifanrusercontent.com/1donykIpnuvcRiAX.jpg",
    "created_at": 1513076305,
    "created_by": 16042162,
    "description": "iphoneX 发布",
    "group_id": 1513076211190694,
    "id": 1513076305938456,
    "updated_at": 1513076364,
    "pointer_test_order": {
      "created_at": 1538966895,
      "_table": "test_order",
      "id": "5bbac56fbd66033df7fd0aa2",
      "created_by": 61736923,
      "updated_at": 1538966895
    }
  }
}
```

**请求示例 2**

```js
MyContentGroup.select(['title', 'pointer_test_oder']).expand('pointer_test_oder').find().then(res => {
  // success
}, err => {
  // err
})
```

**请求结果 2**

```json
{
  "statusCode": 200,
  "data": {
    "meta": {
      "next": null,
      "offset": 0,
      "total_count": 1,
      "limit": 20,
      "previous": null
    },
    "objects": [
      {
        "title": "iphone X",
        "pointer_test_order": {
          "created_at": 1538966895,
          "_table": "test_order",
          "id": "5bbac56fbd66033df7fd0aa2",
          "created_by": 61736923,
          "updated_at": 1538966895,
          "pointer_test_order": {
            "created_at": 1538966895,
            "_table": "test_order",
            "id": "5bbac56fbd66033df7fd0aa2",
            "created_by": 61736923,
            "updated_at": 1538966895
          }
        }
      }
    ]
  }
}
```

### 获取分类详情

`MyContentGroup.getCategory(categoryID)`

**OBJECT 参数说明**

| 参数         | 类型     | 必填 | 说明    |
| ---------- | ------ | -- | ----- |
| categoryID | Number | 是  | 分类 ID |

**返回参数**

| 参数             | 类型      | 说明      |
| -------------- | ------- | ------- |
| children       | Array   | 子分类列表   |
| have\_children | Boolean | 是否含有子分类 |
| id             | Number  | 分类 ID   |
| name           | String  | 分类名称    |

**请求示例**

```js
let categoryID = 1513076252710475
MyContentGroup.getCategory(categoryID).then(res => {
  // success
}, err => {
  // err
})
```

**返回示例**

res.data:

```json
{
  "have_children": true,
  "id": 1513076252710475,
  "name": "科技",
  "children": [
    {
      "have_children": false,
      "id": 1514515552050186,
      "name": "评测"
    }
  ]
}
```

### 获取内容库分类列表

`MyContentGroup.getCategoryList()`

**请求示例**

```js
MyContentGroup.getCategoryList().then(res => {
  // success
}, err => {
  // err
})
```

### 分页与排序

内容查询的分页与排序操作和[数据表分页与排序](/baas-js-sdk/js-sdk/schema/limit-and-order.md)方法一致。

**请求示例**

```js
MyContentGroup.orderBy('-created_by').limit(5).offset(10).find().then()
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://ifanr.gitbook.io/baas-js-sdk/js-sdk/content/operate.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
