Я использую плагин typescript-mongodb
для graphql-codegen
для создания типов Typescript для извлечения данных из MongoDB и вывода их через GraphQL на Node.
Моя входная схема GraphQL выглядит так
type User @entity{
id: ID @id,
firstName: String @column @map(path: "first_name"),
...
Сгенерированные выходные типы Typescript выглядят правильно
export type User = {
__typename?: 'User',
id?: Maybe<Scalars['ID']>,
firstName?: Maybe<Scalars['String']>,
...
И соответствующий объект БД
export type UserDbObject = {
_id?: Maybe<String>,
first_name: Maybe<string>,
...
Проблема в том, что при фактической отправке документа mongo в виде UserDbObject
я не получаю отображаемые поля в выводе. Я мог бы написать собственный преобразователь, который повторно отображает поля обратно в тип User
, но это будет означать, что я сопоставляю поля в двух разных местах.
то есть я не получаю сопоставленные поля от такого преобразователя
userById: async(_root: any, args: QueryUserByIdArgs, _context: any) : Promise<UserDbObject> => {
const result = await connectDb().then((db) => {
return db.collection<UserDbObject>('users').findOne({'_id': args.id}).then((doc) => {
return doc;
});
})
...
return result as UserDbObject;
}
};
Есть ли способ использовать плагин typescript-mongodb
, чтобы отображать только эти поля в схеме, а затем использовать автоматически сгенерированный код для их разрешения?