sql >> Databáze >  >> NoSQL >> MongoDB

Jak mohu používat GraphQL s Mongoose a MongoDB bez vytváření modelů Mongoose

Měli byste se podívat na GraphQL-to-MongoDB aneb jak jsem se naučil přestat se bát a milovat API generované dotazy . Hovoří o balíčku middlewaru, který využívá typy GraphQL ke generování vašeho GraphQL API a analyzuje požadavky odeslané od klientů do dotazů MongoDB. Víceméně přeskakuje Mongoose.

Upozornění:toto je můj blogový příspěvek.

balíček generuje vstupní typy GraphQL pro vaše argumenty pole schématu a obtéká funkci resolve, aby je analyzoval do dotazů MongoDB.

Je dán jednoduchý 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 }
                })
            }))
        }
    })
}); 

Pro nejběžnější případ použití vytvoříte pole ve schématu GraphQL pomocí getMongoDbQueryResolver a getGraphQLQueryArgs . filter , projection a options poskytované obalem lze předat přímo funkci 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()
    )
}

Příklad dotazu, který byste mohli odeslat do takového pole:

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

K dispozici je také generátor obálky a typů argumentů pro mutační pole.




  1. Získání nejvyšší hodnoty sloupce v MongoDB

  2. Jak používat MongoDB Connection Pooling na AWS Lambda

  3. Jak přidám administrátora do Mongo ve verzi 2.6?

  4. Jak získat zpět novou hodnotu po aktualizaci ve vloženém poli?