在NoSql中如何确保两列的唯一性,例如Username和Email应该是唯一的

时间:2013-12-04 07:17:26

标签: mongodb cassandra redis amazon-dynamodb nosql

说我想实现一个包含用户列表的简单NoSql数据库。我希望用户的用户名和电子邮件都是唯一的。哪个NoSql数据库可以实现这一点。

3 个答案:

答案 0 :(得分:1)

此解决方案在MongoDB中有效。

您需要在这些字段上添加unique index

db.collection.ensureIndex({
  username: 1,
  email : 1
}, {
  unique: true
})

每当您尝试使用已存在的用户名和电子邮件组合添加文档时,都会引发异常。您只需要捕获异常并告诉客户。

P.S。如果您希望这些字段单独唯一,则可以确保两个索引:

db.collection.ensureIndex({ username: 1 }, { unique: true });
db.collection.ensureIndex({ email : 1 }, { unique: true });

答案 1 :(得分:0)

在Dynamo你不能,至少是直接的方式。这取决于你的模型。例如,如果您的密钥是用户名,并且范围密钥是电子邮件,那么您将能够执行此操作。但是,如果其中一个字段在值中,您将无法实现唯一性

答案 2 :(得分:-1)

您可以在redis上的密钥上使用incr命令。 你会有像这样的东西

127.0.0.1:6379> INCR key
(integer) 1
127.0.0.1:6379> INCR key
(integer) 2
127.0.0.1:6379> INCR key
(integer) 3
127.0.0.1:6379> INCR key
(integer) 4

redis是一个非常有用的数据库,可以管理缓存(比如memcache,但有很多键类型的持久性)和pub / sub.Can非常轻且非常有效。

我在很多情况下使用它(会话,InterProcessCommunication,持久性,实时消息传递,光数据存储,lua中的地理位置计算,...)我喜欢它。  more infomation