Mutations

EdgeDB provides GraphQL mutations to perform delete, insert and update operations.

Delete

The “delete” mutation is very similar in structure to a query. Basically, it works the same way as a query, using the filter, order, and various pagination parameters to define a set of objects to be deleted. These objects are also returned as the result of the delete mutation. Each object type has a corresponding delete_ mutation:

GraphQL

EdgeQL equivalent

Mutations - 图1Copy
  1. mutation delete_all_books {
  2. delete_Book {
  3. title
  4. synopsis
  5. author {
  6. name
  7. }
  8. }
  9. }
Mutations - 图2Copy
  1. select (
  2. delete Book
  3. ) {
  4. title,
  5. synopsis,
  6. author: {
  7. name
  8. }
  9. };
Mutations - 图3Copy
  1. mutation delete_book_spam {
  2. delete_Book(
  3. filter: {
  4. title: {
  5. eq: Spam
  6. }
  7. }
  8. ) {
  9. title
  10. synopsis
  11. }
  12. }
Mutations - 图4Copy
  1. select (
  2. delete Book
  3. filter
  4. Book.title = Spam
  5. ) {
  6. title,
  7. synopsis
  8. };
Mutations - 图5Copy
  1. mutation delete_one_book {
  2. delete_Book(
  3. filter: {
  4. author: {
  5. name: {
  6. eq:
  7. Lewis Carroll
  8. }
  9. }
  10. },
  11. order: {
  12. title: {
  13. dir: ASC
  14. }
  15. },
  16. first: 1
  17. ) {
  18. title
  19. synopsis
  20. }
  21. }
Mutations - 图6Copy
  1. select (
  2. delete Book
  3. filter
  4. Book.author.name =
  5. Lewis Carroll
  6. order by
  7. Book.title ASC
  8. limit 1
  9. ) {
  10. title,
  11. synopsis
  12. };

Insert

The “insert” mutation exists for every object type. It allows creating new objects and supports nested insertions, too. The objects to be inserted are specified via the data parameter, which takes a list of specifications. Each such specification has the same structure as the object being inserted with required and optional fields (although if a field is required in the object, but has a default it’s optional in the insert specification):

GraphQL

EdgeQL equivalent

Mutations - 图7Copy
  1. mutation insert_books {
  2. insert_Book(
  3. data: [{
  4. title: One
  5. }, {
  6. title: Two
  7. }]
  8. ) {
  9. id
  10. title
  11. }
  12. }
Mutations - 图8Copy
  1. select {
  2. (insert Book {
  3. title := One
  4. }),
  5. (insert Book {
  6. title := Two
  7. })
  8. } {
  9. id,
  10. title
  11. };

It’s possible to insert a nested structure all at once (e.g. a new book and a new author):

GraphQL

EdgeQL equivalent

Mutations - 图9Copy
  1. mutation insert_books {
  2. insert_Book(
  3. data: [{
  4. title: Three”,
  5. author: {
  6. data: {
  7. name:
  8. Unknown
  9. }
  10. }
  11. }]
  12. ) {
  13. id
  14. title
  15. }
  16. }
Mutations - 图10Copy
  1. select (
  2. insert Book {
  3. title := Three”,
  4. author := (
  5. insert Author {
  6. name :=
  7. Unknown
  8. }
  9. )
  10. }
  11. ) {
  12. id,
  13. title
  14. };

It’s also possible to insert a new object that’s connected to an existing object (e.g. a new book by an existing author). In this case the nested object is specified using filter, order, and various pagination parameters to define a set of objects to be connected:

GraphQL

EdgeQL equivalent

Mutations - 图11Copy
  1. mutation insert_book {
  2. insert_Book(
  3. data: [{
  4. title: Four”,
  5. author: {
  6. filter: {
  7. name: {eq: Unknown”}
  8. }
  9. }
  10. }]
  11. ) {
  12. id
  13. title
  14. }
  15. }
Mutations - 图12Copy
  1. select (
  2. insert Book {
  3. title := Four”,
  4. author := (
  5. select Author
  6. filter
  7. Author.name =
  8. Unknown
  9. )
  10. }
  11. ) {
  12. id,
  13. title
  14. };

Update

The “update” mutation has features that are similar to both an “insert” mutation and a query. On one hand, the mutation takes filter, order, and various pagination parameters to define a set of objects to be updated. On the other hand, the data parameter is used to specify what and how should be updated.

The data parameter contains the fields that should be altered as well as what type of update operation must be performed (set, increment, append, etc.). The particular operations available depend on the type of field being updated.

GraphQL

EdgeQL equivalent

Mutations - 图13Copy
  1. mutation update_book {
  2. update_Book(
  3. filter: {
  4. title: {
  5. eq: One
  6. }
  7. }
  8. data: {
  9. synopsis: {
  10. set: TBD
  11. }
  12. author: {
  13. set: {
  14. filter: {
  15. name: {
  16. eq:
  17. Unknown
  18. }
  19. }
  20. }
  21. }
  22. }
  23. ) {
  24. id
  25. title
  26. }
  27. }
Mutations - 图14Copy
  1. with
  2. Upd := (
  3. update Book
  4. filter
  5. Book.title =
  6. One
  7. set {
  8. synopsis :=
  9. TBD”,
  10. author := (
  11. select Author
  12. filter
  13. Author.name =
  14. Unknown
  15. )
  16. }
  17. )
  18. select Upd {
  19. id,
  20. title
  21. };