facile-it/mongodb-bundle

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

Installs: 31 255

Dependents: 0

Suggesters: 0

Stars: 25

Watchers: 30

Forks: 11

Open Issues: 9

Type:symfony-bundle

1.0.0-ALPHA1 2019-08-02 14:43 UTC

README

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 Build Status Scrutinizer Code Quality Code Coverage

Installation

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()
{
    $bundles = array(
        // ...
        new Facile\MongoDbBundle\FacileMongoDbBundle(),
    );

    // ...

    return $bundles
}

Configuration

Here is the configuration reference:

mongo_db_bundle:
    
    data_collection: true # set to false to disable data collection
    
    # clients section, here you can define connection to different servers or with different credentials
    clients:
    
      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
    connections:
    
      foo_db:
        client_name:    foo_client_name # Required - your client name in clients section
        database_name:  'foo_db' # Required
        
      other_db:
        client_name:    ~
        database_name:  ~
        
      foo_db_2:
        client_name:    ~
        database_name:  ~

Services

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

Fixtures

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.

Ordering

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.

Commands

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

Contributing

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-cli:

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.