2012-09-12 1770 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

嗨想要插入值,但有一个唯一的名称,如登录用户名,如何使用户名唯一,同时插入登录集合 –