2012-12-16 77 views
3

当涉及索引字段时,Spring数据和MongoDB存在很多问题。我已经阅读了文档,但他们并不擅长解释@Indexed(unique = true)和@Indexed(unique = false)之间的区别。我有一个我想索引的字段,所以我可以对它执行快速查询。在这种情况下,它是通常应该是唯一的电子邮件地址,但emailAddress可能在一段时间内为空。但是,一旦一个记录为空电子邮件地址,我不能有任何其他记录与空电子邮件地址。 Spring Data拒绝使用null emailAddresses插入任何其他记录。它没有抛出任何不起作用的东西。现在我已将它设置为unique = true,但我正在考虑将其设置为unique = false来解决此问题。这会解决问题吗?还有什么其他问题可以通过放松来补充? MongoDB是否允许我有多个相同的邮件地址,并且在查询时仍然很快?春季数据MongoDB索引(唯一= true)

回答

6

从MongoDB的文档: http://docs.mongodb.org/manual/core/indexes/#unique-indexes

所以,如果你有一个独特的关键,千万不要将其设置为null。老实说,在你的用例(电子邮件字段)中,我相信你不需要使用唯一键,你可以使用稀疏键,所以,没有电子邮件的文档不会占用你的btree索引,这将节省您的空间,并提高查找速度。