This article will show how to get the _id of Inserted Document in Mongo Database in Node.js.
In MongoDB, each document is assigned a unique identifier called _id. When inserting a new document into a collection using Node.js, you may want to retrieve the _id of the inserted document for further use.
Using Object Reference (Shorter Way)
The MongoDB driver for Node.js appends the _id field to the original object reference during insertion. You can take advantage of this by accessing the _id property directly inside the callback function.
const objectToInsert = { /* Your document data */ };
collection.insert(objectToInsert, function(err) {
if (err) return console.error(err);
// Object inserted successfully.
const objectId = objectToInsert._id; // Get the _id of the inserted object
console.log("Inserted object ID:", objectId);
});
Explanation:
objectToInsertis the document you want to insert into the MongoDB collection.- The
collection.insertmethod is used to insert the document into the collection. - Inside the callback function, the
_idof the inserted object is directly accessed from the original object reference.
Using Callback Parameter
Another way to obtain the _id is by utilizing the second parameter of the callback function for the collection.insert method. This parameter contains information about the inserted documents, including their _ids.
const objectToInsert = { /* Your document data */ };
collection.insert(objectToInsert, function(err, docsInserted) {
if (err) return console.error(err);
// Output the entire inserted document(s) information
console.log(docsInserted);
// Access the _id of the first inserted document
const objectId = docsInserted.ops[0]._id;
console.log("Inserted object ID:", objectId);
});
Explanation:
- Similar to Method 1,
objectToInsertis the document you want to insert. - The callback function now takes two parameters:
erranddocsInserted, wheredocsInsertedcontains information about the inserted document(s). - The
_idof the first inserted document is accessed usingdocsInserted.ops[0]._id.
Using insertedId Property
You can directly access the insertedId property on the result object to obtain the _id of the inserted document. This method is demonstrated using promises.
const documentToInsert = { /* Your document data */ };
db.collection("collection-name")
.insertOne(documentToInsert)
.then(result => {
const objectId = result.insertedId;
console.log("Inserted object ID:", objectId);
})
.catch(err => {
console.error(err);
// Handle error
});
Explanation:
documentToInsertis the document to be inserted.insertOneis a method provided by the MongoDB driver for Node.js to insert a single document into a collection.- The result of the insertion operation is a promise, and the
_idis accessed usingresult.insertedId.
Converting to String
If you prefer the _id as a string, you can convert it using the toString() method.
const result = /* result from insertion operation */;
const objectIdAsString = result.insertedId.toString();
console.log("Inserted object ID as String:", objectIdAsString);
Explanation:
- Assuming
resultis the result from the insertion operation. - The
_idis obtained usingresult.insertedId. - The
_idis converted to a string using thetoString()method.
Extracting _id from Callback Object
MongoDB sends the complete document as a callback object. You can directly extract the _id from this callback object.
collection.save(function(err, room) {
if (err) return console.error(err);
const newRoomId = room._id;
console.log("Inserted object ID:", newRoomId);
});
Explanation:
collection.saveis used to save a document into the collection.- The callback function receives two parameters:
errandroom. - The
_idof the inserted document is accessed directly from the callback object (room).
Using Async Functions
You can use async functions to get the _id field automatically without manipulating the data object explicitly.
async function save() {
const data = {
name: "John"
};
await db.collection('users').insertOne(data);
// The data object now contains the _id field
return data;
}
// Example usage
save().then(result => {
console.log("Inserted object ID:", result._id);
});
Explanation:
saveis an asynchronous function that inserts a document into the “users” collection.- The
_idof the inserted document is automatically part of the returneddataobject. - The function is called using
save().then(...), and the_idis accessed from the resolved promise.
Choose the method that best fits your application’s structure and requirements. Each method provides a way to obtain the _id of the inserted document in a slightly different manner.