Node.js can be used in database applications.
One of the most popular NoSQL database is MongoDB.
To be able experiment with the code examples, you will need access to a MongoDB database.
You can download a free MongoDB database at https://www.mongodb.com.
Let us try to access a MongDB database with Node.js.
To download and install the official MongoDB driver, open the Command Terminal and execute the following:
Download and install mongodb package:
C:\Users\Your Name>npm install mongodb
Now you have downloaded and installed a mongodb database driver.
Node.js can use this module to manipulate MongoDB databases:
var mongo = require('mongodb');
To create a database in MongoDB, start by creating a MongoClient object, then specify a connection URL with the correct ip address and the name of the database you want to create.
MongoDB will create the database if it does not exist, and make a connection to it.
Create a database called "mydb":
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/mydb";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
console.log("Database
created!");
db.close();
});
Run example »
Save the code above in a file called "demo_create_mongo_db.js" and run the file:
Run "demo_create_mongo_db.js"
C:\Users\Your Name>node demo_create_mongo_db.js
Which will give you this result:
Database created!
A collection in MongoDB is the same as a table in MySQL
To create a collection in MongoDB, use the createCollection()
method:
Create a collection called "customers":
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
dbo.createCollection("customers",
function(err, res) {
if (err) throw err;
console.log("Collection created!");
db.close();
});
});
Run example »
Save the code above in a file called "demo_mongodb_createcollection.js" and run the file:
Run "demo_mongodb_createcollection.js"
C:\Users\Your Name>node demo_mongodb_createcollection.js
Which will give you this result:
Collection created!
To insert a record, or document as it is called in MongoDB, into a collection, we use the
insertOne()
method.
A document in MongoDB is the same as a record in MySQL
The first parameter of the insertOne()
method is an object containing the
name(s) and value(s) of each field in the document you want to insert.
It also takes a callback function where you can work with any errors, or the result of the insertion:
Insert a document in the "customers" collection:
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
var myobj = { name: "Company
Inc", address: "Highway 37" };
dbo.collection("customers").insertOne(myobj, function(err, res) {
if (err) throw err;
console.log("1
document
inserted");
db.close();
});
});
Run example »
Save the code above in a file called "demo_mongodb_insert.js" and run the file:
Run "demo_mongodb_insert.js"
C:\Users\Your Name>node demo_mongodb_insert.js
Which will give you this result:
1 document inserted
Note: If you try to insert documents in a collection that do not exist, MongoDB will create the collection automatically.
To insert multiple documents into a collection in MongoDB, we use the
insertMany()
method.
The first parameter of the insertMany()
method
is an array of objects, containing the data you want to
insert.
It also takes a callback function where you can work with any errors, or the result of the insertion:
Insert multiple documents in the "customers" collection:
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
var myobj = [
{ name: 'John', address: 'Highway 71'},
{ name: 'Peter', address: 'Lowstreet 4'},
{ name: 'Amy',
address: 'Apple st 652'},
{ name: 'Hannah', address:
'Mountain 21'},
{ name: 'Michael', address: 'Valley
345'},
{ name: 'Sandy', address: 'Ocean blvd 2'},
{ name: 'Betty', address: 'Green Grass 1'},
{ name:
'Richard', address: 'Sky st 331'},
{ name: 'Susan',
address: 'One way 98'},
{ name: 'Vicky', address:
'Yellow Garden 2'},
{ name: 'Ben', address: 'Park Lane
38'},
{ name: 'William', address: 'Central st 954'},
{ name: 'Chuck', address: 'Main Road 989'},
{ name:
'Viola', address: 'Sideway 1633'}
];
dbo.collection("customers").insertMany(myobj,
function(err, res) {
if (err) throw err;
console.log("Number of documents inserted: " + res.insertedCount);
db.close();
});
});
Run example »
Save the code above in a file called "demo_mongodb_insert_multiple.js" and run the file:
Run "demo_mongodb_insert_multiple.js"
C:\Users\Your Name>node demo_mongodb_insert_multiple.js
Which will give you this result:
Number of documents inserted: 14
When executing the insertMany()
method, a result object is returned.
The result object contains information about how the insertion affected the database.
The object returned from the example above looked like this:
{
result: { ok: 1, n: 14 },
ops: [
{
name: 'John', address: 'Highway 71', _id: 58fdbf5c0ef8a50b4cdd9a84 },
{ name: 'Peter', address: 'Lowstreet 4', _id: 58fdbf5c0ef8a50b4cdd9a85 },
{ name: 'Amy', address: 'Apple st 652', _id: 58fdbf5c0ef8a50b4cdd9a86 },
{ name: 'Hannah', address: 'Mountain 21', _id: 58fdbf5c0ef8a50b4cdd9a87 },
{ name: 'Michael', address: 'Valley 345', _id: 58fdbf5c0ef8a50b4cdd9a88 },
{ name: 'Sandy', address: 'Ocean blvd 2', _id: 58fdbf5c0ef8a50b4cdd9a89 },
{ name: 'Betty', address: 'Green Grass 1', _id: 58fdbf5c0ef8a50b4cdd9a8a },
{ name: 'Richard', address: 'Sky st 331', _id: 58fdbf5c0ef8a50b4cdd9a8b },
{ name: 'Susan', address: 'One way 98', _id: 58fdbf5c0ef8a50b4cdd9a8c },
{ name: 'Vicky', address: 'Yellow Garden 2', _id: 58fdbf5c0ef8a50b4cdd9a8d },
{ name: 'Ben', address: 'Park Lane 38', _id: 58fdbf5c0ef8a50b4cdd9a8e },
{ name: 'William', address: 'Central st 954', _id: 58fdbf5c0ef8a50b4cdd9a8f },
{ name: 'Chuck', address: 'Main Road 989', _id: 58fdbf5c0ef8a50b4cdd9a90 },
{ name: 'Viola', address: 'Sideway 1633', _id: 58fdbf5c0ef8a50b4cdd9a91 } ],
insertedCount: 14,
insertedIds: [
58fdbf5c0ef8a50b4cdd9a84,
58fdbf5c0ef8a50b4cdd9a85,
58fdbf5c0ef8a50b4cdd9a86,
58fdbf5c0ef8a50b4cdd9a87,
58fdbf5c0ef8a50b4cdd9a88,
58fdbf5c0ef8a50b4cdd9a89,
58fdbf5c0ef8a50b4cdd9a8a,
58fdbf5c0ef8a50b4cdd9a8b,
58fdbf5c0ef8a50b4cdd9a8c,
58fdbf5c0ef8a50b4cdd9a8d,
58fdbf5c0ef8a50b4cdd9a8e,
58fdbf5c0ef8a50b4cdd9a8f
58fdbf5c0ef8a50b4cdd9a90,
58fdbf5c0ef8a50b4cdd9a91 ]
}
The values of the properties can be displayed like this:
Return the number of inserted documents:
console.log(res.insertedCount)
Which will produce this result:
14
If you do not specify an _id
field, then MongoDB
will add one for you and assign a unique id for each document.
In the example above no _id
field was
specified, and as you can see from the result object, MongoDB assigned a unique
_id for each document.
If you do specify the _id
field, the value must
be unique for each document:
Insert three records in a "products" table, with specified
_id
fields:
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
var myobj = [
{ _id: 154, name:
'Chocolate Heaven'},
{ _id: 155, name:
'Tasty Lemon'},
{ _id: 156, name:
'Vanilla Dream'}
];
dbo.collection("products").insertMany(myobj,
function(err, res) {
if (err) throw err;
console.log(res);
db.close();
});
});
Run example »
Save the code above in a file called "demo_mongodb_insert_id.js" and run the file:
Run "demo_mongodb_insert_id.js"
C:\Users\Your Name>node demo_mongodb_insert_id.js
Which will give you this result:
{
result: { ok: 1, n: 3 },
ops: [
{
_id: 154, name: 'Chocolate Heaven },
{
_id: 155, name: 'Tasty Lemon },
{
_id: 156, name: 'Vanilla Dream }
insertedCount: 3,
insertedIds: [
154,
155,
156 ]
}
In MongoDB we use the find and findOne methods to find data in a collection.
Just like the SELECT statement is used to find data in a table in a MySQL database.
To select data from a collection in MongoDB, we can use the
findOne()
method.
The findOne()
method returns the first
occurrence in the selection.
The first parameter of the findOne()
method
is a query object. In this example we use an empty query object, which selects
all documents in a collection (but returns only the first document).
Find the first document in the customers collection:
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
dbo.collection("customers").findOne({}, function(err, result) {
if (err) throw err;
console.log(result.name);
db.close();
});
});
Run example »
Save the code above in a file called "demo_mongodb_findone.js" and run the file:
Run "demo_mongodb_findone.js"
C:\Users\Your Name>node demo_mongodb_findone.js
Which will give you this result:
Company Inc.
To select data from a table in MongoDB, we can also use the
find()
method.
The find()
method returns all
occurrences in the selection.
The first parameter of the find()
method
is a query object. In this example we use an empty query object, which selects
all documents in the collection.
No parameters in the find() method gives you the same result as SELECT * in MySQL.
Find all documents in the customers collection:
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
dbo.collection("customers").find({}).toArray(function(err, result) {
if (err) throw err;
console.log(result);
db.close();
});
});
Run example »
Save the code above in a file called "demo_mongodb_find.js" and run the file:
Run "demo_mongodb_find.js"
C:\Users\Your Name>node demo_mongodb_find.js
Which will give you this result:
[
{ _id:
58fdbf5c0ef8a50b4cdd9a84 , name: 'John', address: 'Highway 71'},
{ _id:
58fdbf5c0ef8a50b4cdd9a85 , name: 'Peter', address: 'Lowstreet 4'},
{
_id: 58fdbf5c0ef8a50b4cdd9a86 , name: 'Amy',
address: 'Apple st 652'},
{ _id: 58fdbf5c0ef8a50b4cdd9a87 , name: 'Hannah', address:
'Mountain 21'},
{ _id: 58fdbf5c0ef8a50b4cdd9a88 , name: 'Michael', address: 'Valley 345'},
{ _id: 58fdbf5c0ef8a50b4cdd9a89 , name: 'Sandy', address: 'Ocean blvd 2'},
{
_id: 58fdbf5c0ef8a50b4cdd9a8a ,
name: 'Betty', address: 'Green Grass 1'},
{ _id:
58fdbf5c0ef8a50b4cdd9a8b , name: 'Richard',
address: 'Sky st 331'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8c , name: 'Susan', address: 'One way
98'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8d , name: 'Vicky', address: 'Yellow Garden 2'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8e , name: 'Ben', address: 'Park Lane 38'},
{
_id: 58fdbf5c0ef8a50b4cdd9a8f , name: 'William',
address: 'Central st 954'},
{ _id: 58fdbf5c0ef8a50b4cdd9a90 , name: 'Chuck', address:
'Main Road 989'},
{ _id: 58fdbf5c0ef8a50b4cdd9a91 , name: 'Viola', address: 'Sideway
1633'}
]
The second parameter of the find()
method
is an object describing which fields to include in the result.
This parameter is optional, and if omitted, all fields will be included in the result.
Return the fields "name" and "address" of all documents in the customers collection:
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
dbo.collection("customers").find({}, { _id: 0, name: 1, address:
1 }).toArray(function(err, result) {
if (err) throw err;
console.log(result);
db.close();
});
});
Run example »
Save the code above in a file called "demo_mongodb_find_fields.js" and run the file:
Run "demo_mongodb_find_fields.js"
C:\Users\Your Name>node demo_mongodb_find_fields.js
Which will give you this result:
[
{ name: 'John', address: 'Highway 71'},
{ name: 'Peter', address: 'Lowstreet 4'},
{
name: 'Amy',
address: 'Apple st 652'},
{ name: 'Hannah', address:
'Mountain 21'},
{ name: 'Michael', address: 'Valley 345'},
{ name: 'Sandy', address: 'Ocean blvd 2'},
{
name: 'Betty', address: 'Green Grass 1'},
{ name: 'Richard',
address: 'Sky st 331'},
{ name: 'Susan', address: 'One way
98'},
{ name: 'Vicky', address: 'Yellow Garden 2'},
{ name: 'Ben', address: 'Park Lane 38'},
{
name: 'William',
address: 'Central st 954'},
{ name: 'Chuck', address:
'Main Road 989'},
{ name: 'Viola', address: 'Sideway
1633'}
]
You are not allowed to specify both 0 and 1 values in the same object (except if one of the fields is the _id field). If you specify a field with the value 0, all other fields get the value 1, and vice versa:
This example will exclude "address" from the result:
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
dbo.collection("customers").find({}, { address: 0 }).toArray(function(err, result) {
if (err) throw err;
console.log(result);
db.close();
});
});
Run example »
To exclude the _id field, you must set its value to 0:
This example will return only the "name" field:
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
dbo.collection("customers").find({}, { _id: 0, name: 1 }).toArray(function(err, result) {
if (err) throw err;
console.log(result);
db.close();
});
});
Run example »
This example will give you the same result as the first example; return all fields except the _id field:
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
dbo.collection("customers").find({}, { _id: 0 }).toArray(function(err, result) {
if (err) throw err;
console.log(result);
db.close();
});
});
Run example »
You get an error if you specify both 0 and 1 values in the same object (except if one of the fields is the _id field):
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
dbo.collection("customers").find({}, { name: 1, address: 0 }).toArray(function(err, result) {
if (err) throw err;
console.log(result);
db.close();
});
});
Run example »
As you can see from the result of the example above, the result can be converted into an array containing each document as an object.
To return e.g. the address of the third document, just refer to the third array object's address property:
Return the address of the third document:
console.log(result[2].address);
Which will produce this result:
Apple st 652
When finding documents in a collection, you can filter the result by using a query object.
The first argument of the find()
method
is a query object, and is used to limit the search.
Find documents with the address "Park Lane 38":
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
var query = { address: "Park Lane 38" };
dbo.collection("customers").find(query).toArray(function(err, result) {
if (err) throw err;
console.log(result);
db.close();
});
});
Run example »
Save the code above in a file called "demo_mongodb_query.js" and run the file:
Run "demo_mongodb_query.js"
C:\Users\Your Name>node demo_mongodb_query.js
Which will give you this result:
[
{ _id: 58fdbf5c0ef8a50b4cdd9a8e
, name: 'Ben', address: 'Park Lane 38' }
]
You can write regular expressions to find exactly what you are searching for.
Regular expressions can only be used to query strings.
To find only the documents where the "address" field starts with the letter "S", use the regular
expression /^S/
:
Find documents where the address starts with the letter "S":
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
var query = { address: /^S/ };
dbo.collection("customers").find(query).toArray(function(err, result) {
if (err) throw err;
console.log(result);
db.close();
});
});
Run example »
Save the code above in a file called "demo_mongodb_query_s.js" and run the file:
Run "demo_mongodb_query_s.js"
C:\Users\Your Name>node demo_mongodb_query_s.js
Which will give you this result:
[
{ _id:
58fdbf5c0ef8a50b4cdd9a8b , name: 'Richard',
address: 'Sky st 331' },
{ _id: 58fdbf5c0ef8a50b4cdd9a91 , name: 'Viola', address: 'Sideway
1633' }
]
Use the sort()
method to sort the result in ascending or descending order.
The sort()
method takes one parameter, an
object defining the sorting order.
Sort the result alphabetically by name:
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
var mysort = { name: 1 };
dbo.collection("customers").find().sort(mysort).toArray(function(err, result) {
if (err) throw err;
console.log(result);
db.close();
});
});
Run example »
Save the code above in a file called "demo_sort.js" and run the file:
Run "demo_sort.js"
C:\Users\Your Name>node demo_sort.js
Which will give you this result:
[
{
_id: 58fdbf5c0ef8a50b4cdd9a86, name: 'Amy',
address: 'Apple st 652'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8e, name: 'Ben', address: 'Park Lane 38'},
{
_id: 58fdbf5c0ef8a50b4cdd9a8a,
name: 'Betty', address: 'Green Grass 1'},
{ _id: 58fdbf5c0ef8a50b4cdd9a90, name: 'Chuck', address:
'Main Road 989'},
{ _id: 58fdbf5c0ef8a50b4cdd9a87, name: 'Hannah', address:
'Mountain 21'},
{ _id:
58fdbf5c0ef8a50b4cdd9a84, name: 'John', address: 'Highway 71'},
{ _id: 58fdbf5c0ef8a50b4cdd9a88, name: 'Michael', address: 'Valley 345'},
{ _id:
58fdbf5c0ef8a50b4cdd9a85, name: 'Peter', address: 'Lowstreet 4'},
{ _id:
58fdbf5c0ef8a50b4cdd9a8b, name: 'Richard',
address: 'Sky st 331'},
{ _id: 58fdbf5c0ef8a50b4cdd9a89, name: 'Sandy', address: 'Ocean blvd 2'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8c, name: 'Susan', address: 'One way
98'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8d, name: 'Vicky', address: 'Yellow Garden 2'},
{ _id: 58fdbf5c0ef8a50b4cdd9a91, name: 'Viola', address: 'Sideway
1633'},
{
_id: 58fdbf5c0ef8a50b4cdd9a8f, name: 'William',
address: 'Central st 954'}
]
Use the value -1 in the sort object to sort descending.
{ name: 1 } // ascending
{ name: -1 } // descending
Sort the result reverse alphabetically by name:
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
var mysort = { name: -1 };
dbo.collection("customers").find().sort(mysort).toArray(function(err, result) {
if (err) throw err;
console.log(result);
db.close();
});
});
Run example »
Save the code above in a file called "demo_sort_desc.js" and run the file:
Run "demo_sort_desc.js"
C:\Users\Your Name>node demo_sort_desc.js
Which will give you this result:
[
{
_id: 58fdbf5c0ef8a50b4cdd9a8f, name: 'William',
address: 'Central st 954'},
{ _id: 58fdbf5c0ef8a50b4cdd9a91, name: 'Viola', address: 'Sideway
1633'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8d, name: 'Vicky', address: 'Yellow Garden 2'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8c, name: 'Susan', address: 'One way
98'},
{ _id: 58fdbf5c0ef8a50b4cdd9a89, name: 'Sandy', address: 'Ocean blvd 2'},
{ _id:
58fdbf5c0ef8a50b4cdd9a8b, name: 'Richard',
address: 'Sky st 331'},
{ _id:
58fdbf5c0ef8a50b4cdd9a85, name: 'Peter', address: 'Lowstreet 4'},
{ _id: 58fdbf5c0ef8a50b4cdd9a88, name: 'Michael', address: 'Valley 345'},
{ _id:
58fdbf5c0ef8a50b4cdd9a84, name: 'John', address: 'Highway 71'},
{ _id: 58fdbf5c0ef8a50b4cdd9a87, name: 'Hannah', address:
'Mountain 21'},
{ _id: 58fdbf5c0ef8a50b4cdd9a90, name: 'Chuck', address:
'Main Road 989'},
{
_id: 58fdbf5c0ef8a50b4cdd9a8a,
name: 'Betty', address: 'Green Grass 1'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8e, name: 'Ben', address: 'Park Lane 38'},
{
_id: 58fdbf5c0ef8a50b4cdd9a86, name: 'Amy',
address: 'Apple st 652'}
]
To delete a record, or document as it is called in MongoDB, we use the
deleteOne()
method.
The first parameter of the deleteOne()
method
is a query object defining which document to delete.
Note: If the query finds more than one document, only the first occurrence is deleted.
Delete the document with the address "Mountain 21":
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
var myquery = { address: 'Mountain 21' };
dbo.collection("customers").deleteOne(myquery, function(err, obj) {
if (err) throw err;
console.log("1
document deleted");
db.close();
});
});
Run example »
Save the code above in a file called "demo_delete.js" and run the file:
Run "demo_delete.js"
C:\Users\Your Name>node demo_delete.js
Which will give you this result:
1 record deleted
To delete more than one document, use the
deleteMany()
method.
The first parameter of the deleteMany()
method
is a query object defining which documents to delete.
Delete all documents were the address starts with the letter "O":
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
var myquery = { address: /^O/ };
dbo.collection("customers").deleteMany(myquery, function(err, obj) {
if (err) throw err;
console.log(obj.result.n + "
document(s) deleted");
db.close();
});
});
Run example »
Save the code above in a file called "demo_delete_many.js" and run the file:
Run "demo_delete_many.js"
C:\Users\Your Name>node demo_delete_many.js
Which will give you this result:
2 document(s) deleted
The deleteMany()
method returns an object which contains information about how
the execution affected the database.
Most of the information is not important to understand, but one object inside the object is called "result" which tells us if the execution went OK, and how many documents were affected.
The result object looks like this:
{ n: 2, ok: 1 }
You can use this object to return the number of deleted documents:
Return the number of deleted documents:
console.log(obj.result.n);
Which will produce this result:
2
You can delete a table, or collection as it is called in MongoDB, by using
the drop()
method.
The drop()
method takes a callback function
containing the error object and the result parameter which returns true if the collection was dropped successfully,
otherwise it returns false.
Delete the "customers" table:
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
dbo.collection("customers").drop(function(err, delOK) {
if (err) throw err;
if (delOK) console.log("Collection
deleted");
db.close();
});
});
Run example »
Save the code above in a file called "demo_drop.js" and run the file:
Run "demo_drop.js"
C:\Users\Your Name>node demo_drop.js
Which will give you this result:
Collection deleted
You can also use the dropCollection()
method to delete a table (collection).
The dropCollection()
method takes two parameters: the name of the collection
and a callback function.
Delete the "customers" collection, using dropCollection():
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
dbo.dropCollection("customers", function(err, delOK) {
if (err) throw err;
if (delOK) console.log("Collection
deleted");
db.close();
});
});
Run example »
Save the code above in a file called "demo_dropcollection.js" and run the file:
Run "demo_dropcollection.js"
C:\Users\Your Name>node demo_dropcollection.js
Which will give you this result:
Collection deleted
You can update a record, or document as it is called in MongoDB, by using
the updateOne()
method.
The first parameter of the updateOne()
method
is a query object defining which document to update.
Note: If the query finds more than one record, only the first occurrence is updated.
The second parameter is an object defining the new values of the document.
Update the document with the address "Valley 345" to name="Mickey" and address="Canyon 123":
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://127.0.0.1:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
var myquery = { address: "Valley 345" };
var newvalues = {
$set: {name:
"Mickey", address: "Canyon 123" } };
dbo.collection("customers").updateOne(myquery,
newvalues, function(err, res) {
if (err) throw err;
console.log("1 document updated");
db.close();
});
});
Run example »
Save the code above in a file called "demo_update_one.js" and run the file:
Run "demo_update_one.js"
C:\Users\Your Name>node demo_update_one.js
Which will give you this result:
1 document updated
When using the $set
operator, only the
specified fields are updated:
Update the address from "Valley 345" to "Canyon 123":
...
var myquery = { address: "Valley 345" };
var newvalues
= { $set: { address: "Canyon 123" } };
dbo.collection("customers").updateOne(myquery,
newvalues, function(err, res) {
...
Run example »
To update all documents that meets the criteria of the query, use
the updateMany()
method.
Update all documents where the name starts with the letter "S":
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://127.0.0.1:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
var myquery = { address: /^S/ };
var newvalues = {$set: {name:
"Minnie"} };
dbo.collection("customers").updateMany(myquery, newvalues, function(err,
res) {
if (err) throw err;
console.log(res.result.nModified + " document(s) updated");
db.close();
});
});
Run example »
Save the code above in a file called "demo_update_many.js" and run the file:
Run "demo_update_many.js"
C:\Users\Your Name>node demo_update_many.js
Which will give you this result:
2 document(s) updated
The updateOne()
and the
updateMany()
methods return an object which contains information about how
the execution affected the database.
Most of the information is not important to understand, but one object inside the object is called "result" which tells us if the execution went OK, and how many documents were affected.
The result object looks like this:
{ n: 1, nModified: 2, ok: 1 }
You can use this object to return the number of updated documents:
Return the number of updated documents:
console.log(res.result.nModified);
Which will produce this result:
2
To limit the result in MongoDB, we use the limit()
method.
The limit()
method takes one parameter, a number defining how many documents
to return.
Consider you have a "customers" collection:
[
{ _id:
58fdbf5c0ef8a50b4cdd9a84 , name: 'John', address: 'Highway 71'},
{ _id:
58fdbf5c0ef8a50b4cdd9a85 , name: 'Peter', address: 'Lowstreet 4'},
{
_id: 58fdbf5c0ef8a50b4cdd9a86 , name: 'Amy',
address: 'Apple st 652'},
{ _id: 58fdbf5c0ef8a50b4cdd9a87 , name: 'Hannah', address:
'Mountain 21'},
{ _id: 58fdbf5c0ef8a50b4cdd9a88 , name: 'Michael', address: 'Valley 345'},
{ _id: 58fdbf5c0ef8a50b4cdd9a89 , name: 'Sandy', address: 'Ocean blvd 2'},
{
_id: 58fdbf5c0ef8a50b4cdd9a8a ,
name: 'Betty', address: 'Green Grass 1'},
{ _id:
58fdbf5c0ef8a50b4cdd9a8b , name: 'Richard',
address: 'Sky st 331'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8c , name: 'Susan', address: 'One way
98'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8d , name: 'Vicky', address: 'Yellow Garden 2'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8e , name: 'Ben', address: 'Park Lane 38'},
{
_id: 58fdbf5c0ef8a50b4cdd9a8f , name: 'William',
address: 'Central st 954'},
{ _id: 58fdbf5c0ef8a50b4cdd9a90 , name: 'Chuck', address:
'Main Road 989'},
{ _id: 58fdbf5c0ef8a50b4cdd9a91 , name: 'Viola', address: 'Sideway
1633'}
]
Limit the result to only return 5 documents:
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
dbo.collection("customers").find().limit(5).toArray(function(err, result) {
if (err) throw err;
console.log(result);
db.close();
});
});
Run example »
Save the code above in a file called "demo_mongodb_limit.js" and run the file:
Run "demo_mongodb_limit.js"
C:\Users\Your Name>node demo_mongodb_limit.js
Which will give you this result:
[
{ _id:
58fdbf5c0ef8a50b4cdd9a84 , name: 'John', address: 'Highway 71'},
{ _id:
58fdbf5c0ef8a50b4cdd9a85 , name: 'Peter', address: 'Lowstreet 4'},
{
_id: 58fdbf5c0ef8a50b4cdd9a86 , name: 'Amy',
address: 'Apple st 652'},
{ _id: 58fdbf5c0ef8a50b4cdd9a87 , name: 'Hannah', address:
'Mountain 21'},
{ _id: 58fdbf5c0ef8a50b4cdd9a88 , name: 'Michael',
address: 'Valley 345'}
]
As you can see from the result above, only the 5 first documents were returned.
MongoDB is not a relational database, but you can perform a left outer join
by using the $lookup
stage.
The $lookup
stage lets you specify which
collection you want to join with the current collection, and which
fields that should match.
Consider you have a "orders" collection and a "products" collection:
[
{ _id: 1, product_id:
154, status: 1 }
]
[
{ _id: 154, name:
'Chocolate Heaven' },
{ _id: 155, name: 'Tasty Lemons' },
{
_id: 156, name: 'Vanilla Dreams' }
]
Join the matching "products" document(s) to the "orders" collection:
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://127.0.0.1:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
dbo.collection('orders').aggregate([
{ $lookup:
{
from: 'products',
localField: 'product_id',
foreignField: '_id',
as: 'orderdetails'
}
}
]).toArray(function(err,
res) {
if (err) throw err;
console.log(JSON.stringify(res));
db.close();
});
});
Run example »
Save the code above in a file called "demo_mongodb_join.js" and run the file:
Run "demo_mongodb_join.js"
C:\Users\Your Name>node demo_mongodb_join.js
Which will give you this result:
[
{ "_id": 1, "product_id":
154, "status": 1, "orderdetails": [
{ "_id": 154, "name":
"Chocolate Heaven" } ]
}
]
As you can see from the result above, the matching document from the products collection is included in the orders collection as an array.