0

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

4

2 回答 2

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 个字符中。

于 2013-02-28T04:07:22.163 回答
0

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

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

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

于 2013-02-28T00:19:34.793 回答