Mongo,强制集合中的特定字段具有唯一值

时间:2013-10-17 18:01:29

标签: mongodb

我有一个集合:“foo”

foo: {name: 'steve'}

因此,要使名称成为您将运行的唯一索引:

db.foo.ensureIndex( {{name: 1}}, { unique: true } )

但是,我想要做的是确保只允许一个值为'steve'的名称。有没有办法让字段成为唯一索引,但是指定只有在该属性的值具有特定值时才强制执行?

伪查询..... db.foo.ensureIndex( {{name: 'steve'}}, { unique: true } )

foo: {name: 'steve');
foo: {name: 'chris'};
foo: {name: 'chris'};
foo: {name: 'mike'};
foo: {name: 'mike'};

foo: {name: 'steve');
foo: {name: 'steve'};
foo: {name: 'chris'};
foo: {name: 'chris'};
foo: {name: 'mike'};
foo: {name: 'mike'};

1 个答案:

答案 0 :(得分:1)

如果您真的,非常绝望,请将您的价值作为关键:

db.uniq.insert( { "name" : {"steve" : null } }); 
db.uniq.insert( { "name" : {"john" : null } });

db.uniq.ensureIndex( {"name.steve" : 1}, {unique : true, sparse: true} );

而不是null,您可以使用1"bogus"或其他。只要确保它始终相同,最好是小的。

请注意,密钥必须是唯一的稀疏,否则缺少的steve字段将被解释为"steve" : null。因为稀疏密钥实际上只在一个文档上,所以我认为这个解决方案甚至不是特别昂贵。