2012-04-23 51 views

回答

1

有幾種方法:

1 - 假設你正在試圖提供一個唯一的ID給每個博客文章。 爲什麼不覆蓋博客集合中文檔的'_id'字段? 樣的文件將是:

{ "_id" : 122 , "content" : { "title: ..... } 

你將不得不尋找出雖則生成自動增量ID的方法,這是非常容易的。 但是這種類型的主鍵不推薦使用。 http://www.mongodb.org/display/DOCS/How+to+Make+an+Auto+Incrementing+Field

2 - 讓_id場保持原樣,並且additionaly存儲密鑰「blogid」,這是一個整數,你將不得不對「blogid`場運行ensureIndex雖然使由blogid快速訪問。存儲開銷會很小,因爲您將在文檔中存儲更多的鍵名和整數。

樣品的文件是:

{ "_id" : xxxxxxxxxx ,"blogid" : 122, "content" : { "title: ..... } 
+0

是否圍繞scalabilit的blogid方法裙問題還是會遇到與方法1相同的問題? – deltanovember 2012-04-23 05:08:49

+0

@deltanovember blogid方法正常工作。唯一的開銷是數據的額外存儲以及blogid鍵上的索引。也會建議儘可能小地命名這個字段,因爲它需要每個文檔的空間,'bid'應該沒問題。 – DhruvPathak 2012-04-23 05:11:48

1

GitHub上有許多不同的項目,如https://github.com/dodo/node-slughttps://github.com/stipsan/String.Slugify.js,但他們專注於從字符串(通常是帖子主題或文章標題)中生成有效的URL。我還沒有看到任何一個隨機數字,一些如何產生一個較短的隨機(?)和唯一的數字。

就我個人而言,我只在我的發佈對象上有一個標記字段,它包含一個比直接使用數據庫標識更短(並且更安全一點)的唯一值。如果您使用的是Mongoose,則可以通過在Mongoose模型上掛鉤前「保存」事件來自動生成令牌。

2

MongoDB中的ID實際上是將其轉換成數字值,你可以使用下面的代碼在數據庫中搜索數值像1,2十六進制值3 ..和這個代碼將這個值轉換成相應的十六進制

article_collection.db.json_serializer.ObjectID.createFromHexString(id) 

其中article_collection是您的收藏對象