top of page

Node.js MongoDB Update, Limit, Join | Tutorial 3



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.


Example

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

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



Update Only Specific Fields

When using the $set operator, only the specified fields are updated:


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) {
...

Update Many Documents

To update all documents that meets the criteria of the query, use the updateMany() method.

Example

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

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 Result Object

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:


Example

Return the number of updated documents:

console.log(res.result.nModified);

Which will produce this result:

2



Node.js MongoDB Limit

Limit the Result

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:


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'},  
{ _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'} 
] 

Example

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

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:


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.



Node.js MongoDB Join

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.


Consider you have a "orders" collection and a "products" collection:


orders

[  
 { _id: 1, product_id: 154, status: 1 } 
] 

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:

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

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.


Send Your requirement Details at:


To get any MongoDB Assignment Help, Node.js Assignment Help, MongoDB Node.js assignment Help.

36 views0 comments
bottom of page