> ## Documentation Index
> Fetch the complete documentation index at: https://nestjs-query.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Mutations

> The  automatically exposes six mutation endpoints. The endpoints names will be derived from name provided to  or the class name.

The following examples are based on the following `TodoItemDTO`

todo-item.dto.ts

```ts theme={null}
import { FilterableField, IDField } from '@ptc-org/nestjs-query-graphql'
import { ObjectType, ID, GraphQLISODateTime } from '@nestjs/graphql'

@ObjectType('TodoItem')
export class TodoItemDTO {

  @IDField(() => ID)
  id!: string

  @FilterableField()
  title!: string

  @FilterableField()
  completed!: boolean

  @FilterableField(() => GraphQLISODateTime)
  created!: Date

  @FilterableField(() => GraphQLISODateTime)
  updated!: Date
}
```

In the following examples you will see the following endpoints referenced

* `createOneTodoItem` - graphql endpoint to create a single record.

* `createManyTodoItems` - graphql endpoint to create multiple records,

* `updateOneTodoItem` - graphql endpoint to update a single record by id.

* `updateManyTodoItems` - graphql endpoint update multiple records with a filter,

* `deleteOneTodoItem` - graphql endpoint to delete one record by id.

* `deleteManyTodoItems` - graphql endpoint to delete multiple records with a filter.

### Create One[​](#create-one "Direct link to Create One")

The `CRUDResolver` will by default expose a `createOne` mutation using the name of the DTO to name the mutation.

In this example we create a single `TodoItem`, the input by default will be a `Partial` of the DTO.

<Tabs>
  <Tab title="GraphQL">
    ```graphql theme={null}
    mutation {
      createOneTodoItem(
        input: { todoItem: { title: "Create One Todo Item", completed: false } }
      ) {
        id
        title
        completed
        created
        updated
      }
    }
    ```
  </Tab>

  <Tab title="Response">
    ```json theme={null}
    {
      "data": {
        "createOneTodoItem": {
          "id": "1",
          "title": "Create One Todo Item",
          "completed": false,
          "created": "2020-01-14T09:01:35.834Z",
          "updated": "2020-01-14T09:01:35.834Z"
        }
      }
    }
    ```
  </Tab>
</Tabs>

***

### Create Many[​](#create-many "Direct link to Create Many")

The `CRUDResolver` will by default expose a `createMany` mutation using the name of the DTO to name the mutation.

In this example we create multiple `TodoItems`, the each record is a `Partial` of the DTO.

#### Examples[​](#examples "Direct link to Examples")

The following example creates two `TodoItems`.

<Tabs>
  <Tab title="GraphQL">
    ```graphql theme={null}
    mutation {
      createManyTodoItems(
        input: {
          todoItems: [
            { title: "Create Many Todo Items - 1", completed: false }
            { title: "Create Many Todo Items - 2", completed: true }
          ]
        }
      ) {
        id
        title
        completed
        created
        updated
      }
    }
    ```
  </Tab>

  <Tab title="Response">
    ```json theme={null}
    {
      "data": {
        "createManyTodoItems": [
          {
            "id": "2",
            "title": "Create Many Todo Items - 1",
            "completed": false,
            "created": "2020-01-14T09:01:55.110Z",
            "updated": "2020-01-14T09:01:55.110Z"
          },
          {
            "id": "3",
            "title": "Create Many Todo Items - 2",
            "completed": true,
            "created": "2020-01-14T09:01:55.110Z",
            "updated": "2020-01-14T09:01:55.110Z"
          }
        ]
      }
    }
    ```
  </Tab>
</Tabs>

***

### Update One[​](#update-one "Direct link to Update One")

The `CRUDResolver` will by default expose an `updateOne` mutation that takes two fields:

* `id`: The id of the record to update.
* `update`: The values to update on the record. This is a partial so you only have to pass in the values you want to change.

#### Examples[​](#examples-1 "Direct link to Examples")

The following example updates the record with `id` equal to `1` to `completed=true`

<Tabs>
  <Tab title="GraphQL">
    ```graphql theme={null}
    mutation {
      updateOneTodoItem(input: { id: 1, update: { completed: true } }) {
        id
        title
        completed
        created
        updated
      }
    }
    ```
  </Tab>

  <Tab title="Response">
    ```json theme={null}
    {
      "data": {
        "updateOneTodoItem": {
          "id": "1",
          "title": "Create One Todo Item",
          "completed": true,
          "created": "2020-01-14T07:00:31.763Z",
          "updated": "2020-01-14T09:02:28.167Z"
        }
      }
    }
    ```
  </Tab>
</Tabs>

***

### Update Many[​](#update-many "Direct link to Update Many")

The `CRUDResolver` will by default expose an `updateMany` mutation that takes two fields:

* `filter`: The filter to use to find the records to update.
  * **NOTE** The filter **CANNOT** be an empty object. This prevents accidental updating of all records.
* `update`: The values to update on the record. This is a partial so you only have to pass in the values you want to change.

The response contains the number of records updated.

#### Examples[​](#examples-2 "Direct link to Examples")

The following example updates records with an `id` equal to 1 or 2 to `completed=true`.

<Tabs>
  <Tab title="GraphQL">
    ```graphql theme={null}
    mutation {
      updateManyTodoItems(
        input: { filter: { id: { in: [1, 2] } }, update: { completed: true } }
      ) {
        updatedCount
      }
    }
    ```
  </Tab>

  <Tab title="Response">
    ```json theme={null}
    {
      "data": {
        "updateManyTodoItems": {
          "updatedCount": 2
        }
      }
    }
    ```
  </Tab>
</Tabs>

***

### Delete One[​](#delete-one "Direct link to Delete One")

The `CRUDResolver` will by default expose a `deleteOne` mutation that allows you to delete a record by id:

#### Examples[​](#examples-3 "Direct link to Examples")

The following example deletes the record with an id equal to 1.

<Tabs>
  <Tab title="GraphQL">
    ```graphql theme={null}
    mutation {
      deleteOneTodoItem(input: { id: 1 }) {
        id
        title
        completed
        created
        updated
      }
    }
    ```
  </Tab>

  <Tab title="Response">
    ```json theme={null}
    {
      "data": {
        "deleteOneTodoItem": {
          "title": "Create One Todo Item",
          "completed": true,
          "created": "2020-01-14T07:00:31.763Z",
          "updated": "2020-01-14T09:02:51.429Z"
        }
      }
    }
    ```
  </Tab>
</Tabs>

***

### Delete Many[​](#delete-many "Direct link to Delete Many")

The CRUDResolver will by default expose a `deleteMany` mutation that takes a `filter`:

**NOTE** The filter **CANNOT** be an empty object. This prevents accidental deletion of all records.

#### Examples[​](#examples-4 "Direct link to Examples")

The following example deletes all records that start with `Create Many Todo Items`.

<Tabs>
  <Tab title="GraphQL">
    ```graphql theme={null}
    mutation {
      deleteManyTodoItems(
        input: { filter: { title: { like: "Create Many Todo Items%" } } }
      ) {
        deletedCount
      }
    }
    ```
  </Tab>

  <Tab title="Response">
    ```json theme={null}
    {
      "data": {
        "deleteManyTodoItems": {
          "deletedCount": 6
        }
      }
    }
    ```
  </Tab>
</Tabs>

[Edit this page](https://github.com/tripss/nestjs-query/edit/master/docs/graphql/mutations)
