Node.js, mongo快速保存唯一数字的方法



我想让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个字符的字符串?

如果您只需要一个不一定是顺序的唯一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个字符。

在MongoDB中有一种方法可以做到这一点。

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

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

相关内容

  • 没有找到相关文章

最新更新