Apollo Server Express + GraphQL отношения - PullRequest
1 голос
/ 10 апреля 2019

Я использую Express + Apollo Server + GraphQL + Mongoose + MongoDB для «выполнения» нескольких операций CRUD над базой данных.

Одна из операций, которые я пытаюсь выполнить, - это получить сайты из базы данных и расширить пользователей с их информацией для каждой записи, например:

query {
    getSites {
        id
        name
        owner {
            name
            email
        }
        origins
    }
}

Вместо этого я получаю следующие результаты:

{
    "data": {
        "getSites": [{
                "id": "5cae36182ab9b94e94ba9af5",
                "name": "Test site 1",
                "owner": [{
                        "name": null,
                        "email": null
                    }
                ],
                "origins": [
                    "test1",
                    "test2"
                ]
            }, {
                "id": "5cae3a3798c302247c036544",
                "name": "Test site 2",
                "owner": [{
                        "name": null,
                        "email": null
                    }
                ],
                "origins": [
                    "test1",
                    "test2"
                ]
            }
        ]
    }
}

Это мой typeDef код для Site :

import { gql } from 'apollo-server-express';

const site = gql `
    extend type Site {
        id: ID!
        name: String!
        origins: [String]
        owner: [User]
        createdOn: String
        updatedOn: String
    }

    extend type Query {
        getSites: [Site]
        getSite(id: ID!): Site
    }

    extend type Mutation {
        addSite(name: String!, owner: [String!], origins: [String]): Site
    }
`;

export default site;

Если я console.log(sites) вижу, что владельцем является массив строк.

Редактировать

Если я изменю addSite(name: String!, owner: [User], origins: [String]): Site, то получу при компиляции:

Ошибка: тип Mutation.addSite (owner :) должен быть тип ввода, но получил: [пользователь]

Мой распознаватель выглядит так:

getSites: async () => await Site.find().exec()

Как правильно определять отношения сегодня? Спасибо.

1 Ответ

0 голосов
/ 11 апреля 2019

Я только что отредактировал свой преобразователь на это:

getSites: async () => {
    let sites = await Site.find().exec();
    let ownedSites = await User.populate(sites, { path: 'owner' });

    return ownedSites;
}

И это решило ошибки.

...