===========
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();
}
});