2016-08-30 4 views
1

Graphqlから複数のコレクションのデータを返すにはどうすればよいですか?Graphqlから複数のコレクションのデータを返すにはどうすればよいですか?

const jobsCollection = db.collection('jobs'); 

const companysCollection = db.collection('company'); 


import { 
    GraphQLList, 
    GraphQLObjectType, 
    GraphQLSchema, 
    GraphQLString, 
    GraphQLInt, 
    GraphQLFloat, 
    GraphQLEnumType, 
    GraphQLNonNull 
} from 'graphql'; 


const Company = new GraphQLObjectType({ 
    name: 'Company Name', 
    description: 'test', 
    fields:() => ({ 
    _id: {type: GraphQLString}, 
    name: {type: GraphQLString}, 
    address : {type: GraphQLString} 
    } 

    }) 
}); 

以下のクエリを使用して、私は会社のコレクションも照会します。これどうやってするの?

const Job = new GraphQLObjectType({ 
    name: 'job', 
    description: 'test', 
    fields:() => ({ 
    _id: {type: GraphQLString}, 
    name: {type: GraphQLString}, 
    skill_set : {type: GraphQLString}, 
    company: {type: Company} 
    } 

    }) 
}); 

##以下のクエリを使用して、私は会社のコレクションも照会したいと思います。これどうやってするの? ##

答えて

1

GraphQLのスキーマとクエリは、データが1つ、2つまたは10つのコレクションにあるかどうかは関係ありません。異なるデータベースにあるさまざまなサーバーにデータを格納することもできます。 GraphQLサーバは、あなたのスキーマで定義した関係に従って、実際のデータを取得するためにレスポンスの各フィールドに対して解決関数と呼ばれるものを実行することで、ジョインします(つまり、ケースの異なるコレクションのデータを結合します)。あなたは既に、ジョブの解決機能を持っている今、あなたは、単に会社のために別のものを定義する必要が

query { 
    jobs { 
    _id 
    company { 
     name 
    } 
    } 
} 

だからあなたのクエリは次のようになります。おそらく、あなたの仕事のコレクションは、その文書中の会社(と名前)が含まれてのいずれか、またはそれは、会社の_idが含まれているので、あなたが会社の解決機能にしなければならないすべては、このようなものです:私が書いた

resolve(job, args, context, info){ 
    return companyCollection.findOne({ _id: job.companyId }); 
} 

GraphQLの実行をより詳細に説明する、より長いミディアムポスト。それはhereです。

+0

解決済み(ジョブ、引数、コンテキスト、情報){ return companyCollection.findOne({_id:job.companyId}); } ここでは、resolve関数の引数としてrootValueを使用していません。rootValueは何ですか? – chyangba

+0

私はrootValue変数の名前をjobに変更しました。これはそのままです。私の答えの最後に投稿したリンクは、根の価値がどこから来るのかを説明します。 – helfer

関連する問題