Bundle service integration of official [mongodb/mongo-php-library](https://github.com/mongodb/mongo-php-library) driver library

Installs: 48 690

Dependents: 1

Suggesters: 0

Security: 0

Stars: 31

Watchers: 33

Forks: 15

Open Issues: 3


1.4.0 2021-03-03 18:31 UTC


Bundle service integration of official mongodb/mongo-php-library driver library, (mongodb/mongodb on packagist)

PHP MongoDB ext-mongodb

Latest Stable Version Latest Unstable Version Total Downloads License

Flex Support CI Static analysis codecov


First of all, you need to require this library through composer:

composer require facile-it/mongodb-bundle

Then, enable the bundle on the AppKernel class:

// app/AppKernel.php

public function registerBundles()
    return [
        // ...
        new Facile\MongoDbBundle\FacileMongoDbBundle(),


Here is the configuration reference:

    data_collection: true # set to false to disable data collection
    # clients section, here you can define connection to different servers or with different credentials
      foo_client_name:    # choose your client name
        uri: 'mongodb://host1:3062,host2' # default null (will use hosts to build connection URI)
        hosts:            # required if uri is not set - will compose your connection URI (mongodb://host1:3062,host2:27017)
            - { host: host1, port: 3062 } # this 
            - { host: host2 }
        username: ''
        password: ''
        authSource: '' # the database name associated with the user’s credentials, defaults to connection
                       # 'database_name' if not specified
        replicaSet: '' # default null (no replica) (experimental)
        ssl: false
        connectTimeoutMS: 3000 # default null (no timeout)
        readPreference: primaryPreferred # see https://docs.mongodb.com/manual/reference/read-preference/#primary for info

      other_client:   ~ # same as upper configuration
    # connections section, theese represents your Database object reference
        client_name:    foo_client_name # Required - your client name in clients section
        database_name:  'foo_db' # Required
        client_name:    ~
        database_name:  ~
        client_name:    ~
        database_name:  ~
    # Service reference to manage driver options context - see example below
    driverOptions: "app.mongodb.context_service" # default null


You can directly access to the MongoDB\Database with those services:

$this->get('mongo.connection'); // Default connection (first declared)
$this->get('mongo.connection.{connectionName}'); // [test_db, other_db, test_db_2] for example

To manipulate the database, please read the official documentation


This bundle supports doctrine style fixtures. To create one you will need to add a php class in your bundle's /DataFixtures/Mongo directory. For Example src/AppBundle/DataFixtures/Mongo/LoadTaskDataFixture.php.

Note: This class must implement at least the MongoFixtureInterface, if you need container support you can extend AbstractContainerAwareFixture to use the getContainer method.


Since 0.6.6 it's possibile to specify the order by which the fixtures are loaded. Make sure it implements OrderedFixtureInterface. Fixtures with lower values of getOrder will be loaded first.


Some commands are provided:

  • mongodb:database:drop: To drop a database.
  • mongodb:collection:drop: To drop a collection.
  • mongodb:fixtures:load: To load the fixtures.

Query Profiling

On dev environment all queries executed by the library MongoDB\Collection class are profiled and showed inside the symfony web profiler.

Profiler Toolbar

Profiler Panel

Driver options

Example service to manage driver options. This class must implements Facile\MongoDbBundle\Services\DriverOptions\DriverOptionsInterface.

# config/packages/facile_it_mongodb.yaml
    driverOptions: "app.mongodb.context_service"

# config/services.yaml
    class: 'App\Services\DriverOptionsService'
        - context: { cafile: 'example/route/file.crt' }


Feel free to contribute by opening a pull request. Bug fixes or feature suggestions are always welcome.

Development environment

If you like docker there are some scripts to setup an insulated development environment. Please be sure to have docker and docker-compose installed on your system.

To setup the project:

make setup

To start the container and log into the php:

make start

To execute the test suite:

make test

Note: All the above are meant to be used outside the containers.

Port binding setup

During the setup a docker-compose.override.yml file is created from the docker-compose.override.yml.dist template. Change the port binding configuration inside it to fit you needs.