自我增量项目ID逻辑

时间:2018-03-25 17:51:56

标签: node.js database mongodb

我会尽可能地解释我的问题。我正在开发一个应用程序的服务器,帮助警察标记公民'属性。

每个新项目都有自己的ID。它由军官的区域Id(两个didgit),5个自增量数字和当前年份组成。例如:20-00001-18。

分配区域ID和当前年份很容易,但我不知道创建5位数字的正确方法。这个数字取决于地区,每年都会重置。我的想法是在数据库中创建单独的表格,以保留过去项目ID的记录,但我不认为这是最好的方法。

你有什么想法以最好的方式做到这一点吗?

1 个答案:

答案 0 :(得分:0)

You can create a Mongo Sequence in a separate collection mycounters

db.mycounters.insert({ _id: "mySeq", seq: 0 })

Then define a function to read the next value from the defined sequence

function getNextMySeq(name) {
   var ret = db.mycounters.findAndModify(
          {
            query: { _id: name },
            update: { $inc: { seq: 1 } },
            new: true
          }
   );

   return ret.seq;
}

You can now use the function getNextMySeq in you insert query to generate _id. Remember you can concatenate the sequence with other parts of your keys like below

db.c.insert({_id:'20' + getNextMySeq("mySeq") + '2018', name: 'aa'})

In my insert query 20 & 2018 are hardcoded but you can actually have variables when you programatically prepare the insert.