=========== Quick Start =========== This guide will show you how to set up a simple application using Node.js and MongoDB. Its scope is only how to set up the driver and perform the simple CRUD operations. Create the package.json file ---------------------------- First, create a directory where your application will live. .. code-block:: sh mkdir myproject cd myproject Enter the following command and answer the questions to create the initial structure for your new project: .. code-block:: sh npm init Next, install the driver dependency. .. code-block:: sh npm install mongodb --save You should see **NPM** download a lot of files. Once it's done you'll find all the downloaded packages under the **node_modules** directory. Start a MongoDB Server ---------------------- For complete MongoDB installation instructions, see `the manual `_. #. Download the right MongoDB version from `MongoDB `_ #. Create a database directory (in this case under **/data**\ ). #. Install and start a ``mongod`` process. .. code-block:: sh mongod --dbpath=/data You should see the **mongod** process start up and print some status information. Connect to MongoDB ------------------ Create a new **app.js** file and add the following code to try out some basic CRUD operations using the MongoDB driver. Add code to connect to the server and the database **myproject**\ : .. literalinclude:: /includes/basic-connection.js :language: js Run your app from the command line with: .. code-block:: sh node app.js The application should print **Connected successfully to server** to the console. Insert a Document ----------------- Add to **app.js** the following function which uses the **insertMany** method to add three documents to the **documents** collection. .. code-block:: js async function insertDocuments(db) { // Get the documents collection const collection = db.collection('documents'); // Insert some documents const result = await collection.insertMany([{ a: 1 }, { a: 2 }, { a: 3 }]); assert.equal(3, result.result.n); assert.equal(3, result.ops.length); console.log('Inserted 3 documents into the collection'); return result; } The **insert** command returns an object with the following fields: * **result** Contains the result document from MongoDB * **ops** Contains the documents inserted with added **_id** fields * **connection** Contains the connection used to perform the insert Add the ``insertDocuments`` method to your app: .. code-block:: js const { MongoClient } = require('mongodb'); const assert = require('assert'); // Connection URL const url = 'mongodb://localhost:27017'; // Database Name const dbName = 'myproject'; const client = new MongoClient(url, { useNewUrlParser: true }); // Use connect method to connect to the server client.connect().then(async function() { console.log("Connected successfully to server"); const db = client.db(dbName); try { await insertDocuments(db); } finally { await client.close(); } }); Run the updated **app.js** file: .. code-block:: sh node app.js The operation returns the following output: .. code-block:: sh Connected successfully to server Inserted 3 documents into the collection Find All Documents ------------------ Add a query that returns all the documents. .. code-block:: js async function findDocuments(db) { // Get the documents collection const collection = db.collection('documents'); // Find some documents const docs = await collection.find({}).toArray(); console.log("Found the following records"); console.log(docs); return docs; } This query returns all the documents in the **documents** collection. Add the ``findDocuments`` method to your app: .. code-block:: js const { MongoClient } = require('mongodb'); const assert = require('assert'); // Connection URL const url = 'mongodb://localhost:27017'; // Database Name const dbName = 'myproject'; const client = new MongoClient(url, { useNewUrlParser: true }); // Use connect method to connect to the server client.connect().then(async function() { console.log("Connected successfully to server"); const db = client.db(dbName); try { await insertDocuments(db); await findDocuments(db); } finally { await client.close(); } }); Find Documents with a Query Filter ---------------------------------- Add a query filter to find only documents which meet the query criteria. .. code-block:: js async function findDocuments(db) { // Get the documents collection const collection = db.collection('documents'); // Find some documents const docs = await collection.find({'a': 3}).toArray(); console.log("Found the following records"); console.log(docs); return docs; } Only the documents which match ``'a' : 3`` should be returned. Update a document ----------------- The following operation updates a document in the **documents** collection. .. code-block:: js async function updateDocuments(db) { // Get the documents collection const collection = db.collection('documents'); // Update document where a is 2, set b equal to 1 const result = await collection.updateOne({ a : 2 }, { $set: { b : 1 } }); assert.equal(1, result.result.n); console.log("Updated the document with the field a equal to 2"); return result; } The method updates the first document where the field **a** is equal to **2** by adding a new field **b** to the document set to **1**. Add the ``updateDocuments`` method to your app: .. code-block:: js const { MongoClient } = require('mongodb'); const assert = require('assert'); // Connection URL const url = 'mongodb://localhost:27017'; // Database Name const dbName = 'myproject'; const client = new MongoClient(url, { useNewUrlParser: true }); // Use connect method to connect to the server client.connect().then(async function() { console.log("Connected successfully to server"); const db = client.db(dbName); try { await insertDocuments(db); await updateDocuments(db); } finally { await client.close(); } }); Remove a document ----------------- Remove the document where the field **a** is equal to **3**. .. code-block:: js async function removeDocument(db) { // Get the documents collection const collection = db.collection('documents'); // Delete document where a is 3 const result = await collection.deleteOne({ a : 3 }); assert.equal(1, result.result.n); console.log("Removed the document with the field a equal to 3"); return result; } Add the ``removeDocument`` method to your app: .. code-block:: js const { MongoClient } = require('mongodb'); const assert = require('assert'); // Connection URL const url = 'mongodb://localhost:27017'; // Database Name const dbName = 'myproject'; const client = new MongoClient(url, { useNewUrlParser: true }); // Use connect method to connect to the server client.connect().then(async function() { console.log("Connected successfully to server"); const db = client.db(dbName); try { await insertDocuments(db); await updateDocuments(db); await removeDocuments(db); } finally { await client.close(); } }); Index a Collection ------------------ `Indexes `_ can improve your application's performance. The following function creates an index on the **a** field in the **documents** collection. .. code-block:: js async function indexCollection(db) { const results = await db.collection('documents').createIndex({ a: 1 }); console.log(results); return results; } Add the ``indexCollection`` method to your app: .. code-block:: js const { MongoClient } = require('mongodb'); const assert = require('assert'); // Connection URL const url = 'mongodb://localhost:27017'; // Database Name const dbName = 'myproject'; const client = new MongoClient(url, { useNewUrlParser: true }); // Use connect method to connect to the server client.connect().then(async function() { console.log("Connected successfully to server"); const db = client.db(dbName); try { await insertDocuments(db); await indexCollection(db); } finally { await client.close(); } });