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 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, 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.
make setup # will build the needed containers and setup the project
make start # will start the needed containers and put you inside the php-cli container
make test # will launch the test suite
Note: All these scripts 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.