Home > Enterprise >  How to get MongoDB _id of an inserted document
How to get MongoDB _id of an inserted document

Time:12-07

I want to create a document in my MongoDB database and take the _id of the new document. This is what I'm doing:

const mongoose = require("mongoose");
const billingSchema = require("./models/billing");
const { ObjectId } = require("bson");
const { MongoClient } = require("mongodb");
const mongouri = "***";
var connection = mongoose.createConnection(mongouri);
var Bills = connection.model("Fatturazione", billingSchema, "Fatturazione");


exports.createBill = (b) => {
  return new Promise((resolve, reject) => {
    Bills.Create(b, function (err) {
      if (err) {
        reject(err);
      } else {
        console.log(mongoose.Types.ObjectId(b._id));
        resolve();
      }
    });
  });
};

and this is my Schema:

const mongoose = require("mongoose");
const Schema = mongoose.Schema;

//schema define the structure of the document
const billingSchema = new Schema({
  data_fatturazione: {
    type: Date,
    required: true,
  },
  data_saldo: {
    type: Date,
    required: false,
  },
  totale: {
    type: Number,
    required: false,
  },
  pagato: {
    type: Boolean,
    required: false,
  },
});

module.exports = billingSchema;

In the console.log() I want to print the _id of the last inserted document but it prints a non-existing id (it doesn't correspond to the _id of the last created document in the database). I also tried without using mongoose.Types.ObjectId() but it prints undefined. I don't understand where is the problem.

I call the function createBill() in another js file, passing an object with the correct fields.

CodePudding user response:

You are trying to get the _id of argument b, which is passed to your createBill, which is logically undefined. Instead you must get the _id from a result of Bill.create, mongoose callbacks take 2 arguments as @Joe mentioned in the comments, so your code must look like this:

exports.createBill = (b) => {
  return new Promise((resolve, reject) => {
    Bills.Create(b, function (err, result) {
      if (err) {
        reject(err);
      } else {
        console.log(result._id);
        resolve(result);
      }
    });
  });
};
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" frameborder="0"></iframe>

  • Related