node.js,mongo快速保存唯一编号的方法

时间:2013-02-27 22:45:33

标签: javascript node.js mongodb guid

我想让mongo为我保留一个递增的数字,以便我可以调用该数字,然后从中生成一个字符串。

x = 1e10
x.toString(36).substring(2,7)

>>'dqpds'

每次我从mongo

调用它时,我都有办法增加数字
db.counter.update({ _id: 1 }, { $inc: { seq: 1 } }, {upsert: true}, 
    function(err, val){
    //...
})

但是我想在开头设置数字为1e10,这样我就可以获得一个5个字符长的字符串,但我宁愿不要多次调用数据库。

如何在mongo中设置upsert的默认值。或者你有更有效的方法来生成一个独特的5 - 6字符串吗?

2 个答案:

答案 0 :(得分:1)

如果您只需要一个不一定是顺序的唯一ID,则可以使用ObjectId的第一部分。

从上面的文件中有一个描述:

  

ObjectId是一个12字节的BSON类型,使用:

构造
a 4-byte timestamp,
a 3-byte machine identifier,
a 2-byte process id, and
a 3-byte counter, starting with a random value.

所以你可以这样做:

x = ObjectId().toString().subString(0,4)

此方法不涉及数据库IO,因此性能会更好。如果你想更加确定它的唯一性,可以添加计数器的最后2个字节,使其成为6个字符。

答案 1 :(得分:0)

有一种方法可以在MongoDB中执行此操作。

您使用findAndModify命令,它在您正在寻找的上下文中详细描述:

http://docs.mongodb.org/manual/tutorial/create-an-auto-incrementing-field/