Bundle service integration of official mongodb/mongo-php-library driver library, (mongodb/mongodb on packagist)
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
}
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
hosts: # Required - will compose your mongo connection url (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: ~
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 create a php class in your bundle '/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.
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.
On dev environment all queries executed by the library MongoDB\Collection class are profiled and showed inside the symfony web profiler.
Feel free to contribute by opening a pull request, if you find a bug or to suggest a new feature. If you like docker, this repository is provided with a dev environment with some scripts to prepare and use it. All you need is docker and docker-compose installed on your system.
./setup.sh # will build the needed containers and setup the project
./start.sh # will start the needed containers and put you inside the php-cli container
./test.sh # will launch the test suite
Note: All these scripts are meant to be used outside the containers.