Skip to main content

mongoke

Project description

mongoke

Instantly serve your MongoDb database via graphql

SiteDocsExamples

Features

  • Powerful Queries: Pagination, filtering, relation, relay-style connections built-in and generated in a bunch of seconds
  • Works with existing databases: Point it to an existing MongoDb database to instantly get a ready-to-use GraphQL API
  • Authorization via Jwt: Every collection can be protected based on jwt payload and document fields
  • Horizontally Scalable: The service is completely stateless and can be replicated on demand
  • Apollo Federation: The service can be easily glued with other graphql servers to handle writes and more complicated logic.
  • Resilient Idempotent Configuration: One YAML Configuration as the only source of truth, relations, authorization and types in one file

Quickstart:

Docker compose

The fastest way to try Mongoke is via docker-compose.

1. Write the configuration to describe the database schema and relations

The ObjectId scalar is already defined by default, it is converted to string when sent as json

# ./mongoke.yml
schema: |
    type User {
        _id: ObjectId
        username: String
        email: String
    }
    type BlogPost {
        _id: ObjectId
        author_id: ObjectId
        title: String
        content: String
    }

types:
    User:
        collection: users
    BlogPost:
        collection: posts

relations:
    - field: posts
      from: User
      to: BlogPost
      relation_type: to_many
      where:
          author_id: ${{ parent['_id'] }}

2. Run the mongoke image with the above configuration

To start the container mount copy paste the following content in a docker-compose.yml file, then execute docker-compose up.

# docker-compose.yml
version: '3'

services:
    mongoke:
        ports:
            - 4000:80
        image: mongoke/mongoke
        environment:
            DB_URL: mongodb://mongo/db
        volumes:
            - ./mongoke.yml:/conf.yml
    mongo:
        image: mongo
        logging:
            driver: none

3. Query the generated service via graphql or go to http://localhost:4000/graphiql to open graphiql

{
    user(where: { username: { eq: "Mike" } }) {
        _id
        username
        email
        posts {
            nodes {
                title
            }
        }
    }

    blogPosts(first: 10, after: "Post 1", cursorField: title) {
        nodes {
            title
            content
        }
        pageInfo {
            endCursor
            hasNextPage
        }
    }
}

Tutorials

Please help the project making new tutorials and submit a issue to list it here!


Todo:

  • use graphql to define the schema
  • publish the docker image (after tartiflette devs fix extend type issue)
  • resolve issue connection nodes must all have an _id field because it is default cursor field
  • integration tests for all the resolver types
  • integration tests for the relations
  • add pipelines feature to all resolvers (adding a custom find and find_one made with aggregate)
  • add the $ to the where input fields inside resolvers (in must be $in, ...)
  • remove strip_nones after asserting v1 works

Low priority

  • required config field, add verify the jwt with the secret if provided
  • add schema validation to the configuration
  • subscriptions
  • add edges to make connection type be relay compliant
  • better performance of connection_resolver removing the $skip and $count
  • add a dataloader for single connections

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mongoke-1.0.13.tar.gz (15.5 kB view details)

Uploaded Source

File details

Details for the file mongoke-1.0.13.tar.gz.

File metadata

  • Download URL: mongoke-1.0.13.tar.gz
  • Upload date:
  • Size: 15.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.6.8

File hashes

Hashes for mongoke-1.0.13.tar.gz
Algorithm Hash digest
SHA256 6299bc2edc80393ba9a258617f33c79af316720117a0516b46a2dbc5daa3319c
MD5 38894bed99ea277da8e112ef385ceff9
BLAKE2b-256 7170c6aef7446c9b24fe4b5e3b62f9bb416733b1e9985a79d12ee14c64b9f42c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page