Node JS MongoDB Notes
Node JS MongoDB Notes
js MongoDB
❮ PreviousNext ❯
MongoDB
To be able to experiment with the code examples, you will need access to a MongoDB database.
To download and install the official MongoDB driver, open the Command Terminal and execute
the following:
Creating a Database
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.
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"
Database created!
MongoDB waits until you have created a collection (table), with at least one document (record)
before it actually creates the database (and collection).
Node.js MongoDB Create Collection
❮ PreviousNext ❯
Creating a Collection
To create a collection in MongoDB, use the createCollection() method:
Run example »
Save the code above in a file called "demo_mongodb_createcollection.js" and run the file:
Run "demo_mongodb_createcollection.js"
Collection created!
MongoDB waits until you have inserted a document before it actually creates the collection.
Node.js MongoDB Insert
❮ PreviousNext ❯
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:
Run example »
Save the code above in a file called "demo_mongodb_insert.js" and run the file:
Run "demo_mongodb_insert.js"
1 document inserted
Note: If you try to insert documents in a collection that do not exist, MongoDB will create the
collection automatically.
ADVERTISEMENT
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:
Example
Insert multiple documents in the "customers" collection:
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"
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 ]
}
Example
Return the number of inserted documents:
console.log(res.insertedCount)
14
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:
Example
Insert three records in a "products" table, with specified _id fields:
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"
{
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.
Find One
To select data from a collection in MongoDB, we can use the findOne() method.
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).
Run example »
Save the code above in a file called "demo_mongodb_findone.js" and run the file:
Run "demo_mongodb_findone.js"
Company Inc.
ADVERTISEMENT
Find All
To select data from a table in MongoDB, we can also use the find() method.
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.
Example
Find all documents in the customers collection:
Run example »
Save the code above in a file called "demo_mongodb_find.js" and run the file:
Run "demo_mongodb_find.js"
[
{ _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'}
]
Find Some
The second parameter of the find() method is the projection object that describes which fields
to include in the result.
This parameter is optional, and if omitted, all fields will be included in the result.
Example
Return the fields "name" and "address" of all documents in the customers collection:
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"
[
{ 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:
Example
This example will exclude "address" from the result:
Run example »
Example
This example will return only the "name" field:
Run example »
Example
This example will give you the same result as the first example; return all fields except the _id
field:
Run example »
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):
Run example »
The Result Object
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:
Example
Return the address of the third document:
console.log(result[2].address);
Apple st 652
The first argument of the find() method is a query object, and is used to limit the search.
Run example »
Save the code above in a file called "demo_mongodb_query.js" and run the file:
Run "demo_mongodb_query.js"
[
{ _id: 58fdbf5c0ef8a50b4cdd9a8e , name: 'Ben', address: 'Park Lane 38' }
]
ADVERTISEMENT
To find only the documents where the "address" field starts with the letter "S", use the regular
expression /^S/:
Example
Find documents where the address starts with the letter "S":
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"
[
{ _id: 58fdbf5c0ef8a50b4cdd9a8b , name: 'Richard', address: 'Sky st 331' },
{ _id: 58fdbf5c0ef8a50b4cdd9a91 , name: 'Viola', address: 'Sideway 1633' }
]
❮ PreviousNext ❯
The sort() method takes one parameter, an object defining the sorting order.
Run example »
Save the code above in a file called "demo_sort.js" and run the file:
Run "demo_sort.js"
[
{ _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'}
]
ADVERTISEMENT
Sort Descending
Use the value -1 in the sort object to sort descending.
{ name: 1 } // ascending
{ name: -1 } // descending
Example
Sort the result reverse alphabetically by name:
Run example »
Save the code above in a file called "demo_sort_desc.js" and run the file:
Run "demo_sort_desc.js"
[
{ _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'}
]
Node.js MongoDB Delete
❮ PreviousNext ❯
Delete Document
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.
Run example »
Save the code above in a file called "demo_delete.js" and run the file:
Run "demo_delete.js"
ADVERTISEMENT
Delete Many
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.
Example
Delete all documents were the address starts with the letter "O":
Run example »
Save the code above in a file called "demo_delete_many.js" and run the file:
Run "demo_delete_many.js"
2 document(s) deleted
The Result Object
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.
{ n: 2, ok: 1 }
You can use this object to return the number of deleted documents:
Example
Return the number of deleted documents:
console.log(obj.result.n);
Drop Collection
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.
ExampleGet your own Node.js Server
Delete the "customers" table:
Run example »
Save the code above in a file called "demo_drop.js" and run the file:
Run "demo_drop.js"
Collection deleted
ADVERTISEMENT
db.dropCollection
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.
Example
Delete the "customers" collection, using dropCollection():
Run example »
Save the code above in a file called "demo_dropcollection.js" and run the file:
Run "demo_dropcollection.js"
Collection deleted
Update Document
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.
ExampleGet your own Node.js Server
Update the document with the address "Valley 345" to name="Mickey" and address="Canyon
123":
Run example »
Save the code above in a file called "demo_update_one.js" and run the file:
Run "demo_update_one.js"
1 document updated
ADVERTISEMENT
Example
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 »
Example
Update all documents where the name starts with the letter "S":
Run example »
Save the code above in a file called "demo_update_many.js" and run the file:
Run "demo_update_many.js"
2 document(s) updated
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.
{ n: 1, nModified: 2, ok: 1 }
You can use this object to return the number of updated documents:
Example
Return the number of updated documents:
console.log(res.result.nModified);
The limit() method takes one parameter, a number defining how many documents to return.
Example
Limit the result to only return 5 documents:
Run example »
Save the code above in a file called "demo_mongodb_limit.js" and run the file:
Run "demo_mongodb_limit.js"
customers
[
{ _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.
Join Collections
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.
products
[
{ _id: 154, name: 'Chocolate Heaven' },
{ _id: 155, name: 'Tasty Lemons' },
{ _id: 156, name: 'Vanilla Dreams' }
]
Example
Join the matching "products" document(s) to the "orders" collection:
Run example »
Save the code above in a file called "demo_mongodb_join.js" and run the file:
Run "demo_mongodb_join.js"
[
{ "_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.