Похоже, что ваш код мог бы выиграть от использования синтаксиса расширения ES6 - он позволил бы вам иметь дело с произвольным числом свойств из вашего args
объекта без необходимости в последовательных третичных операторах.
Mutation: {
updateHub: async (_, { id, ...restArgs } ) => {
const query = {'_id': id};
const updateFields = { ...restArgs };
const result = await HubStore.findByIdAndUpdate(query, updateFields);
return {
success: !result ? false : true,
message: 'updated',
hub: result
};
}
}
Если по какой-то причине вам нужно явно установить неопределенные свойства в свой объект null
, вы можете использовать какой-нибудь config obj и метод, например defaults
, из библиотеки lodash, как показано ниже:
import { defaults } from 'lodash';
const nullFill = { url: null, ports: null, enabled: null }; // include any other properties that may be needed
Mutation: {
updateHub: async (_, { id, ...restArgs } ) => {
const query = {'_id': id};
const updateFields = defaults(restArgs, nullFill);
const result = await HubStore.findByIdAndUpdate(query, updateFields);
return {
success: !result ? false : true,
message: 'updated',
hub: result
};
}
}
Кроме того, FWIW, я хотел бы рассмотреть возможность размещения динамических аргументов, которые потенциально могут быть обновлены, на свой собственный тип ввода, такой как HubInput
в этом случае, как предложено в документах graphql . Ниже я показал, как это может работать с вашей мутацией. Обратите внимание, что поскольку ничто в HubInput не помечено как Requird (!
), вы можете передать динамический набор свойств для обновления. Также обратите внимание, что если вы возьмете это appraoch, вам нужно будет должным образом деструктурировать ваш объект args
изначально в вашей мутации, что-то вроде { id, input }
.
input HubInput {
url: String
ports: // whatever this type is, like [String]
enabled: Boolean
// ...Anything else that might need updating
}
type UpdateHubPayload {
success: Boolean
message: String
hub: Hub // assumes you have defined a type Hub
}
updateHub(id: Int, input: HubInput!): UpdateHubPayload