GraphQL обновить встроенный документ - PullRequest
0 голосов
/ 15 декабря 2018

Я новичок в GraphQL.Я пытаюсь обновить встроенный документ.На странице из MongoDB пишут, что вы должны использовать точечную нотацию («field.nestedField»).Но как мне написать запрос graphql с точкой для обновления.

Проблема в том, что моя перезапись запроса "toolbarColor": "#fff" я имею в виду "toolbarColor" будет удалена из базы данных.Пожалуйста, ПОМОГИТЕ МНЕ

Вот существующий документ из базы данных

{
    "_id" : ObjectId("5c13bab2a51af024f0c7a237"),
    "interfaceSettings" : {
        "dark" : true
        "toolbarColor" : "#fff"
    },
    "username" : "Lena",
}

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

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

Result DBDoc

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

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

Схема Мангуста (уменьшена) -----------------------------------------

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

Схема GraphQL (уменьшенная) --------------------------------------------

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 {уменьшенный}

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

Mutation: {
  update: async (_, { _id, input }) => {
    const user = await User.findOneAndUpdate({ _id }, { $set: input }, { new: true })
    return user
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...