sql >> データベース >  >> NoSQL >> MongoDB

Mongooseモデルを作成せずにMongooseおよびMongoDBでGraphQLを使用するにはどうすればよいですか?

    GraphQL-to-MongoDB、または心配をやめて生成されたクエリAPIを愛する方法を学んだ 。 GraphQLのタイプを活用してGraphQLAPIを生成し、クライアントから送信されたリクエストをMongoDBクエリに解析するミドルウェアパッケージについて説明します。多かれ少なかれマングースをスキップします。

    免責事項:これは私のブログ投稿です。

    パッケージ スキーマフィールド引数のGraphQL入力タイプを生成し、resolve関数をラップアラウンドしてそれらをMongoDBクエリに解析します。

    単純なGraphQLTypeが与えられた場合:

    const PersonType = new GraphQLObjectType({
        name: 'PersonType',
        fields: () => ({
            age: { type: GraphQLInt },
            name: {
                type: new GraphQLNonNull(new GraphQLObjectType({
                    name: 'NameType',
                    fields: () => ({
                        firstName: { type: GraphQLString },
                        lastName: { type: GraphQLString }
                    })
                }))
            }
        })
    }); 
    

    最も一般的なユースケースでは、getMongoDbQueryResolverを使用してGraphQLスキーマにフィールドを構築します。 およびgetGraphQLQueryArgsfilterprojection 、およびoptions ラッパーによって提供されるものは、find関数に直接渡すことができます。

    person: {
        type: new GraphQLList(PersonType),
        args: getGraphQLQueryArgs(PersonType),
        resolve: getMongoDbQueryResolver(PersonType,
            async (filter, projection, options, source, args, context) =>
                await context.db.collection('person').find(filter, projection, options).toArray()
        )
    }
    

    このようなフィールドに送信できるクエリの例:

    {
        person (
            filter: {
                age: { GT: 18 },
                name: { 
                    firstName: { EQ: "John" } 
                }
            },
            sort: { age: DESC },
            pagination: { limit: 50 }
        ) {
            name { 
                lastName
            }
            age
        }
    }
    

    ミューテーションフィールド用のラッパーと引数タイプジェネレーターもあります。




    1. 2つの異なるキーを使用したMongoDB集計結果

    2. mongodumpを使用してMongoDBデータベースをバックアップする

    3. アップサートによるマングース重複キーエラー

    4. Dockerコンテナのディスク使用量を分析する方法