Skip to main content

MongoDB

by v4.2 | Debian 9

NoSQL database engine for document-oriented databases.

MongoDB is the solution for database requirements that stray away from traditional relational management: enter a NoSQL solution used by enterprise companies including eBay and Forbes. The document database allows users to start creating documents in your database without needing to establish a document structure, which allows users to edit on the fly and rapidly scale. Due to this flexibility in both data structure and management, MongoDB is often used as a single database solution for companies and organizations that have fluctuating DB needs.

Build your own flexible database with Linode’s MongoDB One-Click App.

MongoDB Options

FIELDDESCRIPTION
Mongo PasswordPassword for your MongoDB admin account. Required.

Getting Started After Deployment

  1. SSH into your Linode and create a limited user account.
  2. Log out and log back in as your limited user account.
  3. Update your server:

    sudo apt-get update && apt-get upgrade
  4. Access MongoDB with the admin account password you set when launching the MongoDB One-Click App:

    mongo -u admin -p --authenticationDatabase admin

    The The -u-p, and --authenticationDatabase options in the above command are required in order to authenticate connections to the shell. Without authentication, the MongoDB shell can be accessed but will not allow connections to databases.

    The admin user is purely administrative based on the roles specified. It is defined as an administrator of users for all databases, but does not have any database permissions itself. You may use it to create additional users and define their roles. If you are using multiple applications with MongoDB, set up different users with custom permissions for their corresponding databases.
  5. As the admin user, create a new database to store regular user data for authentication. The following example calls this database user-data:

    use user-data
  6. Permissions for different databases are handled in separate  roles objects. This example creates the user, example-user, with read-only permissions for the user-data database and has the read and write permissions for the example-DB database that we’ll create in the Manage Data and Collections section below.

    db.createUser({user: "example-user", pwd: "password", roles:[{role: "read", db: "user-data"}, {role:"readWrite", db: "exampleDB"}]})
    To create additional users, repeat this step as the administrative user, creating new usernames, passwords and roles by substituting the appropriate values.
  7. Exit the mongo shell:

    quit()

    For more information on access control and user management, as well as other tips on securing your databases, refer to the MongoDB Security Documentation.

Manage Data and Collections

Much of MongoDB’s popularity comes from its ease of integration. Interactions with databases are done via JavaScript methods, but drivers for other languages are available. This section will demonstrate a few basic features, but we encourage you to do further research based on your specific use case.

  1. Open the MongoDB shell using the example-user we created above:

    mongo -u example-user -p --authenticationDatabase user-data
  2. Create a new database. This example calls it exampleDB:
    use exampleDB

    Make sure that this database name corresponds with the one for which the user has read and write permissions (we added these permissions in the previous section).

    To show the name of the current working database, run the db command.
  3. Create a new collection called exampleCollection:

    db.createCollection("exampleCollection", {capped: false})

    If you’re not familiar with MongoDB terminology, you can think of a collection as analogous to a table in a relational database management system. For more information on creating new collections, see the MongoDB documentation on the db.createCollection() method.

    Note: Collection names should not include certain punctuation such as hyphens. However, exceptions may not be raised until you attempt to use or modify the collection. For more information, refer to MongoDB’s naming restrictions.
  4. Create sample data for entry into the test database. MongoDB accepts input as documents in the form of JSON objects such as those below. The a and b variables are used to simplify entry; objects can be inserted directly via functions as well.

    var a = { name : "John Doe", attributes: { age : 30, address : "123 Main St", phone : 8675309 }}
    var b = { name : "Jane Doe", attributes: { age : 29, address : "321 Main Rd", favorites : { food : "Spaghetti", animal : "Dog" } }}


    Note that documents inserted into a collection need not have the same schema, which is one of many benefits of using a NoSQL database.
  5. Insert the data into exampleCollection, using the insert method:

    db.exampleCollection.insert(a)
    db.exampleCollection.insert(b)


    The output for each of these operations will show the number of objects successfully written to the current working database:

    WriteResult({ "nInserted" : 1 })
  6. Confirm that the exampleCollection collection was properly created:

    show collections

    The output will list all collections containing data within the current working database:

    exampleCollection
  7. View unfiltered data in the exampleCollection collection using the find method. This returns up to the first 20 documents in a collection, if a query is not passed:

    db.exampleCollection.find()

    The output will resemble the following:

    { "_id" : ObjectId("5e68d4618bd4ea23cc3f5e96"), "name" : "John Doe", "attributes" : { "age" : 30, "address" : "123 Main St", "phone" : 8675309 } }
    { "_id" : ObjectId("5e68d4628bd4ea23cc3f5e97"), "name" : "Jane Doe", "attributes" : { "age" : 29, "address" : "321 Main Rd", "favorites" : { "food" : "Spaghetti", "animal" : "Dog" } } }


    You may notice the objects we entered are preceded by _id keys and ObjectId values. These are unique indexes generated by MongoDB when an _id value is not explicitly defined. ObjectId values can be used as primary keys when entering queries, although for ease of use, you may wish to create your own index as you would with any other database system.

    The find method can also be used to search for a specific document or field by entering a search term parameter (in the form of an object) rather than leaving it empty. For example:

    db.exampleCollection.find({"name" : "John Doe"})

    Running the command above returns a list of documents containing the {"name" : "John Doe"} object:

    { "_id" : ObjectId("5e68d4618bd4ea23cc3f5e96"), "name" : "John Doe", "attributes" : { "age" : 30, "address" : "123 Main St", "phone" : 8675309 } }

The MongoDB One-Click App was built by Linode. For support regarding app deployment, contact Linode Support via the information listed in the sidebar. For support regarding the tool or software itself, visit the MongoDB Community.