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
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: ~
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.
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. Bug fixes or feature suggestions are always welcome.
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.
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.