2017-05-23 4 views
0

Ich habe versucht, Beispiel wie möglich zu vereinfachen, also wenn zusätzliche Informationen benötigt, könnte ich es bereitstellen. Lassen Sie uns sagen, dass wir einfach Schema mit embed GraphQLObjectType haben:GraphQL und Mongoose überschreiben Eigenschaft auf Null mit nicht übergebenem Argument in der Mutation

const nameType = new GraphQLObjectType({ 
    name: 'NameType', 
    fields: { 
    first: new GraphQLNonNull(GraphQLString), 
    last: GraphQLString, 
    }, 
}); 

const userType = new GraphQLObjectType({ 
    name: 'User', 
    fields:() => ({ 
    id: new GraphQLNonNull(GraphQLID), 
    name: new GraphQLNonNull(nameType), 
    email: new GraphQLNonNull(GraphQLString), 
    }), 
}); 

So habe ich Namen mit Immobilien hier erste und letzte. Für die Aktualisierung habe ich die Mutation wie folgt geschrieben. Es gibt GraphQLInputObjectType als NameType.

const nameType = new GraphQLInputObjectType({ 
    name: 'NameInput', 
    fields: { 
    first: new GraphQLNonNull(GraphQLString), 
    last: GraphQLString, 
    }, 
}); 

const updateUser = { 
    name: 'UpdateUser', 
    type: userType, 
    args: { 
    id: new GraphQLNonNull(GraphQLID), 
    name: nameType, 
    email: GraphQLString, 
    }, 
    resolve: (_, args, context) => User.findOneAndUpdate({ _id: args.id }, args, { new: true }) 
}; 

Also, wenn ich jede Mutation mit name: {first: "Foo"} Eigenschaft bin vorbei last immer überschreibt mit null Wert. Ich bin gezwungen, den vorherigen Vornamen und den neuen Nachnamen zu übergeben, wenn ich den Nachnamen ändern muss. Ich würde gerne eine Möglichkeit haben, nur eine erste oder letzte zu aktualisieren, ohne eine andere zu beeinflussen. Wie kann ich es erreichen?

+0

Ich kenne den Grund in JavaScript. Es unterstützt keine tiefe Klon oder tiefe Zusammenführung, also suche ich immer noch die Lösung. –

Antwort

0

Das ist, weil Mongoose-Update-Eigenschaft verschachtelte Objekte als Ganzes ändern. Wenn wir also innerhalb der Update-Operation tief verschmelzen müssen, brauchen wir etwas wie here.

Wenn wir mehr verschachtelte Schichten abdecken müssen, können wir diesen Code in der while-Schleife verwenden.

Verwandte Themen