我想让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字符串吗?
答案 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/