簡體   English   中英

Apollo Server Express + GraphQL關系

[英]Apollo Server Express + GraphQL relationships

我正在使用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"
                ]
            }
        ]
    }
}

這是我的Site的 typeDef代碼:

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 :)的類型必須為Input Type,但得到:[User]

我的解析器如下所示:

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

今天定義關系的正確方法是什么? 謝謝。

我剛剛將解析器修改為此:

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

    return ownedSites;
}

這就解決了錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM