2012-09-12 115 views
5
TENANT 
    { "_ID" : 11, NAME : "ruben", OPERATION :[{OPERATION_ID: 100, NAME : "Check"}] } 

如何設置OPERATION_ID具有唯一性以避免重複值並避免使用主鍵這樣的空值?Mongodb設置唯一字段

回答

12

當你想要的OPERATION_IDs是所有租戶唯一的,那麼你可以做這樣的:

db.tenants.ensureIndex({ operation.OPERATION_ID : 1 }, { unique:true, sparse:true }); 

當你想要的OPERATION_IDs是每個租戶唯一的,所以兩個住戶既可以有operation_ID:100,但沒有承租人可以將operation_id:100兩次,您必須將租戶的_id添加到索引,以便任何給定的_id和operation_id組合都是唯一的。

db.tenants.ensureIndex({ _id: 1, operation.OPERATION_ID : 1 }, { unique:true, sparse:true }); 
4

添加上OPERATION.OPERATION_ID一個unique index將確保沒有兩個不同的文件將包含的元素在運轉相同的OPERATION_ID。

如果要防止單個文檔在OPERATION中具有兩個具有相同OPERATION_ID的元素,則不能使用唯一索引;你將不得不使用set更新操作符(例如$ set和$ addToSet)。你可以把操作成OPERATION_ID鍵子文檔,像這樣:

{ "_ID" : 11, NAME : "ruben", OPERATION : {"100" : {NAME : "Check"} }} 

然後,你可以通過發出$設置更新強制唯一性;例如:

db.<collection>.update({NAME: "ruben"}, {$set: {"OPERATION.100.NAME": "Uncheck"}}) 

關於空值:MongoDB中沒有特點的領域非空約束(它甚至不強制某一領域有一個單獨的類型),所以你必須確保你的沒有插入空值的應用程序。

+0

嗨想要插入值,但有一個唯一的名稱,如登錄用戶名,如何使用戶名唯一,同時插入登錄集合 –