如何使用节点js自动递增ID并将其发布到mongodb

时间:2018-08-29 06:57:20

标签: node.js mongodb

我想在发布数据时在mongoDB中自动增加id。我可以附加req.body的日期。如何附加具有自动增量的ID?

这是我的帖子:

router.post('/addVisualization', function (req, res, next) {
    MongoClient.connect(url, function (err, db) {
        if (err) throw err;
        var dbo = db.db(dbName);
        req.body.dateOfEntry = new Date();
         function getNextSequence(id) {
            var ret = db.counters.findAndModify(
            {
              query: { _id: id },
              update: { $inc: { seq: 1 } },
              new: true
            }
            );
             return ret.seq;
          }
          dbo.collection("visualization").insertOne(req.body, function (err, resDB) {
            if (err) {
                throw err;
                res.status(401);
                res.send({
                    "status": 401,
                    "message": "Some error happened"
                });
            }
            else {
                console.log("1 document inserted");
                res.status(201)
                res.send({
                    "body": req.body,
                    "status": 201,
                    "message": "visualization has been added"
                });
            }
        });
        db.close();
    });
});

3 个答案:

答案 0 :(得分:0)

在mongo db中,您没有像mysql或oracle这样的自动增量ID,请查看此tutorial,了解开箱即用的方法。

答案 1 :(得分:0)

使用单独的counters集合来跟踪序列的最后一个ID。

db.counters.insert(
   {
      _id: "userid",
      seq: 0
   }
)
db.counters.insert(
   {
      _id: "productid",
      seq: 0
   }
)

创建一个getNextSequence函数,该函数接受序列的名称。

function getNextSequence(name) {
   var ret = db.counters.findAndModify(
          {
            query: { _id: name },
            update: { $inc: { seq: 1 } },
            new: true,
            upsert : true // Creates a new document if no documents match the query
          }
   );

   return ret.seq;
}

getNextSequence()期间使用此insert函数。

db.users.insert(
   {
     _id: getNextSequence("userid"),
     name: "Mr. X",
     // ... more fields
   }
)

db.products.insert(
   {
     _id: getNextSequence("productid"),
     name: "Mr. Y",
     // ... more fields
   }
)

答案 2 :(得分:0)

尝试以下代码在mongoDB中自动增加ID。

router.post('/addVisualization', function (req, res, next) {
  MongoClient.connect(url, {
  useNewUrlParser: true
  }, function (err, db) {
  if (err) throw err;
  var dbo = db.db(dbName);
  req.body.dateOfEntry = new Date();
  req.body.isDeleted = "false";
  var countRow;
  var sequenceDocument = dbo.collection("counterVisualization").findOneAndUpdate({
  _id: "tid"
  }, {
  $inc: {
  sequence_value: 1
  }
  }, {
  new: true
  });
  dbo.collection("counterVisualization").find({
  _id: "tid"
  }).toArray(function (err, result1) {
  if (err) {
  throw err;
  } else {
  countRow = result1[0].sequence_value;
  req.body["_id"] = countRow;    
  dbo.collection("visualization").insertOne(req.body, function (err, resDB) {
  if (err) {
  throw err;
  res.status(401);
  res.send({
  "status": 401,
  "message": "Some error happened"
  });
  } else {
  console.log("1 document inserted");
  res.status(201)
  res.send({
  "body": req.body,
  "status": 201,
  "message": "visualization has been added"
  });
  }
  });
  }
  });
  });
});