2011-12-31 74 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.'); 
}