sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur använder jag GraphQL med Mongoose och MongoDB utan att skapa Mongoose-modeller

Du bör titta på GraphQL-to-MongoDB, eller hur jag lärde mig att sluta oroa mig och älska genererade fråge-API:er . Den talar om ett mellanprogrampaket som utnyttjar GraphQL:s typer för att generera ditt GraphQL API och analyserar förfrågningar som skickas från klienter till MongoDB-frågor. Den hoppar mer eller mindre över Mongoose.

Ansvarsfriskrivning:det här är mitt blogginlägg.

paketet genererar GraphQL-indatatyper för dina schemafältsarg och lindar upplösningsfunktionen för att analysera dem i MongoDB-frågor.

Givet en enkel 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 }
                })
            }))
        }
    })
}); 

För det vanligaste användningsfallet bygger du ett fält i GraphQL-schemat med en getMongoDbQueryResolver och getGraphQLQueryArgs . filter , projection och options som tillhandahålls av omslaget kan skickas direkt till sökfunktionen.

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()
    )
}

Ett exempel på en fråga du kan skicka till ett sådant fält:

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

Det finns också en omslags- och argumenttypgenerator för mutationsfält.




  1. Hur gör man ett frågedatum i mongodb med pymongo?

  2. mongo 3 dubbletter på unikt index - dropDups

  3. Meteor.js - sätt att göra användarsökning över flera samlingar

  4. Hur man installerar MongoDB