我想让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/