2013-02-27 84 views
0

我想讓mongo爲我保存一個遞增數字,以便我可以調用該數字,然後從中生成一個字符串。node.js,mongo快速保存唯一編號

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

>>'dqpds' 

我有辦法每次我把它從蒙戈

db.counter.update({ _id: 1 }, { $inc: { seq: 1 } }, {upsert: true}, 
    function(err, val){ 
    //... 
}) 

時間遞增的數量,但我想數一開始這樣的設定類似1E10,我得到一個5個字符長字符串,但我寧願沒有超過一個調用數據庫的東西。

如何爲mongo中的upsert設置默認值。或者你有更有效的方式來生成一個獨特的5 - 6字符的字符串?

回答

1

如果你只需要一個唯一的ID這不一定是連續的,你可以使用第一部分ObjectId

從上面的文件有一個說明:

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

所以,你可以這樣做::

的ObjectId是一個12字節的BSON型,採用構建

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

這種方法不涉及數據庫IO,所以性能會更好。如果你想更加確定它的唯一性,請添加計數器的最後2個字節,使其成爲6個字符。

+0

是的,我想我會使用它。 – 2013-02-28 11:38:29

0

有一種方法可以在MongoDB中執行此操作。

您使用findAndModify命令和它的詳細正是你正在尋找這裏的上下文中描述:

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

+0

這是一個跨多個條目的自動遞增字段,我只希望集合中有一個條目,這也不能解決我認爲默認值的問題。我目前的解決方法是檢查應用程序啓動數據庫,但IDS像更簡潔的 – 2013-02-28 00:43:39

+0

這是一個條目。它可以以任何你想要的值開始(如果你在啓動時檢查它,你是不是每次重新啓動應用程序時都要回收它)? – 2013-02-28 08:43:41