Как создать документ в FaunaDB с заданным _id с помощью GraphQL вместо принятия автоматически сгенерированного

#graphql #primary-key #faunadb

#graphql #primary-key #faunadb

Вопрос:

Это можно сделать с помощью FQL, но я не могу найти ни одного примера мутации GraphQL, которая создает новый документ в FaunaDB, где _id определяется приложением, а не самим FaunaDB.

Конечно, я могу добавить свой идентификатор, созданный приложением (например, uuidv4), в качестве дополнительного атрибута в документе и создать для него индекс, но это кажется неправильным, учитывая, что документ в любом случае будет иметь другой первичный ключ.

Ответ №1:

Вы можете использовать директиву resolver, связать с определяемой пользователем функцией (UDF), чтобы принять _id в качестве параметра, а затем использовать Create .

Вот пример,

Файл схемы

 type Order {
  customerName: String!
  price: Float!
}

input OrderInput {
  orderID: Int!
  customerName: String!
  price: Float!
}

type Query {
  CreateOrder(data: OrderInput!): Order! @resolver
}
  

UDF (CreateOrder)

 Update(
  Function("CreateOrder"),
  {
  body: Query(Lambda(["orderdata"],
  Create(Ref(Collection("Order"), Select(["orderID"],Var("orderdata"))),
  {
    data: {
      customerName: Select(["customerName"], Var("orderdata")),
      price: Select(["price"], Var("orderdata"))
    }
  }
)))})
  

Запрос GraphQL
введите описание изображения здесь

введите описание изображения здесь

Комментарии:

1. Спасибо за быстрый ответ, Джей. В сценарии, когда заказ имеет фактическую связь с клиентом, я думаю, мне пришлось бы вручную включить определение ввода OrderCustomerRelation в мою схему, верно? Это все? Моя проблема связана с метафорой просьбы о банане, но в конечном итоге приходится привлекать гориллу и все джунгли.