2011-12-31 72 views

回答

5

从文档:

可以使用{unique: true}选项,以确保底层 索引实施唯一性,只要唯一索引是 的片键的前缀。 (注意:在版本2.0之前,仅当 集合为空时才起作用)。

http://www.mongodb.org/display/DOCS/Configuring+Sharding

这使得直观的感觉,因为MongoDB的无跨碎片检查的独特性,除非片键为您提供了这样的跨碎片的唯一保证“免费”的方式。

+0

不知道我完全理解。我只需要使电子邮件字段成为分片键的一部分?如果我的分片键是'姓氏:1,电子邮件:1',如何才能确保唯一性只在'email'而不是'lastname'上执行? – user646584 2011-12-31 23:01:51

+1

如果你这样做,mongo将能够确保姓氏是唯一的,但不是电子邮件。如果你的分片键被颠倒了,那么电子邮件的唯一性就可以保证。唯一索引需要是分片键的前缀,而不仅仅是子集。 – 2011-12-31 23:14:56

0

我们做

if($exists = $mongo_UserCollection->findOne($desiredEmail)) 
{ 
    throw new User_Exception('Email address in use.'); 
}