MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak używać GraphQL z Mongoose i MongoDB bez tworzenia modeli Mongoose?

Powinieneś spojrzeć na GraphQL-to-MongoDB, czyli jak nauczyłem się przestać się martwić i pokochałem generowane zapytania API . Mówi o pakiecie oprogramowania pośredniczącego, który wykorzystuje typy GraphQL do generowania interfejsu API GraphQL i analizuje żądania wysyłane od klientów do zapytań MongoDB. Mniej więcej pomija Mongoose.

Zastrzeżenie:to jest mój post na blogu.

pakiet generuje typy danych wejściowych GraphQL dla argumentów pól schematu i otacza funkcję resolve, aby przeanalizować je w zapytania MongoDB.

Biorąc pod uwagę prosty 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 }
                })
            }))
        }
    })
}); 

W najczęstszym przypadku użycia zbudujesz pole w schemacie GraphQL za pomocą getMongoDbQueryResolver i getGraphQLQueryArgs . filter , projection i options dostarczone przez opakowanie można przekazać bezpośrednio do funkcji wyszukiwania.

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

Przykład zapytania, które możesz wysłać do takiego pola:

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

Dostępny jest również generator typów opakowań i argumentów dla pól mutacji.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Nie można połączyć Mongodb z kontenerem Springboot w dockerze

  2. Utwórz kopię zapasową bazy danych meteorów za pomocą mongodump?

  3. Jak wyszukiwać tekst w mgo?

  4. Przechowywanie dużego pliku 100 MB w Mongodb

  5. Tworzenie widoku mongo, który zależy od aktualnego czasu