В документации 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
}
}