What is MongoDB?
In this article we are going to show you the basics of MongoDB, but first, what is MongoDB? Is a cross-platform document oriented and NoSQL database.
What does it mean?
MongoDB doesn’t implement the tranditional relational database structure, instead it uses a structure similar to JSON documents with dynamic schemas.
What is needed to connect to a MongoDB database from PHP?
- A MongoDB database running.
- The PHP Driver installed.
To install the PHP Driver:
- Follow official documentation: https://docs.mongodb.org/ecosystem/drivers/php/
If you want to install MongoDB for local development then I recommend AMPPS as one of the easiest way to get your LAMP stack , which also includes MongoDB. http://ampps.com/downloads
Connecting to MongoDB from PHP
$host = 'localhost'; $port = '27017'; //or 28017, port might be different. $database = 'DB_Name_Here'; $username = 'User_Connecting_to_DB_Here'; $password = 'PASSWORD_HERE'; $connecting = sprintf('mongodb://%s:%d/%s', $host, $port, $database); $mongo = new Mongo($connecting, array('username'=> $username, 'password'=> $password));
Selecting the database instance:
$db = $mongo->name_of_your_database_here
Note: No strings/quotes (“) needed around your database name.
How to create a collection? (what you know as tables in traditional relational databases)
$db->createCollection("collection_name_here");
Selecting the collection you are going to work with
$collection= $db->collection_name_here;
Note: No strings/quotes (“) needed around your collection name.
How to insert a document? (what you know as record in traditional relational databases)
First we create an array.
Let’s say we want to insert a document with 2 columns, then:
$document = array( "field_column_name_here" =>"valueHere", "second_field_column_name_here" =>"secondValueHere" );
Then we insert it by doing:
$collection->insert($document);
*Is important to mention that MongoDB is Schemaless therefor we can have many documents with varying set of fields and with different types. Example:
$document = array( "name" =>"Hugo", "lastname" =>"Rosa" );
And then we could have another document with:
$document = array( "name" =>"Hugo", "lastname" =>"Rosa", "company" =>"Developers Court Inc", "url"=>"www.developerscourt.com" );
*MongoDB by default create an ID for each document. This id is defined as _id in each document.
How to find a document?
If you want to get all documents inside a collection then:
$data=$collection->find();
Let say we want to print all the name, then we loop by each one:
foreach($data as $doc) { echo $doc['name'] . "
"; }
To get a specific document:
$results = $collection->findOne(array('field_name_you_want_to_search'=>'value'));
We can also specify which columns we want in the results by adding another array with the name of the columns. Example:
$results = $collection->findOne(array('field_name_you_want_to_search'=>'value'),array('name','company'));
Now the results will include the _id , name and company columns.
If we want to search by using the _id column then:
$results = $collection->findOne(array('_id'=>new MongoId('document_id_value_here')));
How to update a document?
We first find the document we want to update.
$results = $collection->findOne(array('_id'=>new MongoId('document_id_value_here')));
Then we can directly change the values in the result array, like this:
$results['name'] = "Iron Man";
Finally, commit the changes:
$collection->save($results);
Deleting a document from the collection
$toberemoved = array('name'=>'Iron Man'); $collection->remove($toberemoved ,array('safe'=>true));