@vincent4

GraphQL update embedded Document?

В документации MongoDB Написано Чтобы обновить вложный документ Надо применить Оператор конкатенация (dot.notation) Ну как же Сделать такой запрос (mutation) в GraphQL?
Вот документ из базы данных
{
    "_id" : ObjectId("5c13bab2a51af024f0c7a237"),
    "interfaceSettings" : {
        "dark" : true
        "toolbarColor" : "#fff"
    },
    "username" : "Lena",
}


И теперь я хочу изменить "interfaceSettings.dark" : false

mutation {
  user{
    update(_id: "5c13bab2a51af024f0c7a237" input:{
      interfaceSettings: {dark: false}
    }
    ){
      user {
        username 
        interfaceSettings{
          dark 
          toolbarColor
        }
      }
    }
  }}

Результат БД Док

{
    "_id" : ObjectId("5c13bab2a51af024f0c7a237"),
    "interfaceSettings" : {
        "dark" : false
    },
    "username" : "Lena",
}


Backend ##############

Hier is mongoose Schema (reduced)-----------------------------------------

const userSchema = new Schema({
  username: {
    type: String,
    required: true
  },
  interfaceSettings: {
    dark: {
      type: Boolean,
    },
    toolbarColor: {
      type: String,
    }
   },
})


GraphQL Schema (reduced)--------------------------------------------

type User {
    _id: ID,
    username: String
    interfaceSettings: InterfaceSettings
}

type InterfaceSettings {
    dark: Boolean,
    toolbarColor: String
}

type Mutation {
    update( _id: ID, input: InputUser): User
}
    input InputUser {
        username: String
        interfaceSettings: InputInterfaceSettings
    }
    input InputInterfaceSettings {
        dark: Boolean,
        toolbarColor: String
    }


Resolver {reduced}
GraphQL send: Input = {interfaceSettings: {dark: false}}

mutation: {
  update: async (_, { _id, input }) => {
    const user = await User.findOneAndUpdate({ _id }, { $set: input }, { new: true })
    return user
   }
}
  • Вопрос задан
  • 51 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
Cindx Москва
от 130 000 до 180 000 руб.
Lensoft.pro Санкт-Петербург
от 100 000 до 140 000 руб.
Aspirity Красноярск
от 45 000 до 90 000 руб.
18 янв. 2019, в 14:12
70000 руб./в месяц
18 янв. 2019, в 13:24
500 руб./за проект
18 янв. 2019, в 13:04
12000 руб./в месяц