2010-07-21 151 views

回答

66

_id字段是爲mongodb中的主鍵保留的,並且應該是唯一值。如果你沒有設置任何東西到_id它會自動填充「MongoDB Id對象」。但是,您可以將任何獨特的信息放入該字段中。

附加信息:http://www.mongodb.org/display/DOCS/BSON

希望它幫助。

+32

這確實是不回答'如何設置我的作爲主要key'領域之一,例如:我想USER_EMAIL關鍵用戶的集合,而是如何設置字段作爲關鍵和唯一 – 2015-04-19 06:01:44

1

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

您還可以查看這個鏈接和自動遞增的_id領域。

+13

請注意,[鏈接只回答](http://meta.stackoverflow.com/tags/link-only-answers/info)不鼓勵,所以答案應該是搜索的終點一個解決方案(相對於另一個引用的中途停留,它隨着時間的推移會變得陳舊)。請考慮在此添加獨立的摘要,並將鏈接保留爲參考。 – kleopatra 2013-08-20 11:16:11

+1

Link is now broken,so this answer is useless – PeterM 2017-07-11 11:49:17

1

實現此行爲的一種方法是將值設置爲_id(它是爲MongoDB中的主鍵保留的)字段,它基於您希望視爲主鍵的自定義字段。
即,如果我想要employee_id作爲主鍵,那麼在MongoDB中創建文檔時;分配_id的值與employee_id的值相同。

14

另一種方法是爲您的收藏創建Indexes並確保它們是唯一的。

你可以找到更多在下列link

其實我覺得這很簡單,易於實現。

+2

「對索引的唯一約束確保只有一個文檔可以爲集合中的字段賦值。對於分片集合,這些唯一索引不能強制實現唯一性,因爲插入和索引操作是本地的到每個分片「--https://docs.mongodb.org/manual/tutorial/enforce-unique-keys-for-sharded-collections/ – JohnC 2016-04-11 02:30:11

8

在mongodb _id字段爲主鍵保留。如果您沒有在對象中定義它,並且創建索引以確保性能,Mongodb將使用內部ObjectId值。

但是你可以把_id作爲你自己的唯一值,Mongodb會使用它而不是爲你製作一個。即使你想使用多個字段作爲主鍵,你可以使用一個對象:在創建這些ID時

{ _id : { a : 1, b: 1} } 

只是要小心那個鍵(A和B中的例子)的問題,如果你交換的順序他們身邊,這被認爲是一個不同的對象。

3

如果您認爲RDBMS不能創建主鍵,則默認主鍵是_id。 但您可以創建Unique Index。示例如下。

db.members.createIndex({ "user_id": 1 }, { unique: true }) 

db.members.insert({'user_id':1,'name':'nanhe'}) 

db.members.insert({'name':'kumar'}) 

db.members.find(); 

輸出波紋管。

{ 「_id」:的ObjectId( 「577f9cecd71d71fa1fb6f43a」), 「USER_ID」:1, 「名稱」: 「南和」}

{ 「_id」:的ObjectId( 「577f9d02d71d71fa1fb6f43b」), 「名」 的「kumar」}

當您嘗試插入相同的user_id mongodb trow寫入錯誤。

db.members.insert({'user_id':1,'name':'aarush'}) 

寫結果({ 「nInserted」:0, 「writeError」:{ 「代碼」:11000, 「ERRMSG」:「E11000重複鍵錯誤收集:student.members指數:user_id_1 DUP關鍵:{:1.0}」 }} )

4

簡單,你可以使用db.collectionName.createIndex({urfield:1},{unique:true});

2

這是創建主鍵

的語法

db。 <集合> .createIndex(<鍵和索引類型規範>,{ 獨特:真正})

讓我們看我們的數據庫已經收集命名學生和它的文檔已經鍵名爲student_id數據這就需要我們做一個主鍵。那麼命令應該如下所示。

db.student.createIndex({student_id:1},{unique:true}) 

您可以檢查此是否student_id數據集作爲主鍵,試圖重複的值添加到學生集合。

喜歡這個文件進一步信息,請https://docs.mongodb.com/manual/core/index-unique/#create-a-unique-index