在NoSql中如何确保两列的唯一性,例如用户名和电子邮件应该是唯一的



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

此解决方案在MongoDB中有效。

你需要在这些字段上加一个唯一的索引:

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

每当您尝试添加具有已存在的用户名和电子邮件组合的文档时,都会引发异常。您只需要捕捉异常并将其告知客户即可。

附言:如果你想让这些字段单独唯一,你可以确保两个索引:

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

在迪纳摩,你不能,至少在直接的方式。这取决于你的模特。例如,如果你的密钥是用户名,范围密钥是电子邮件,你就可以这样做。但是,如果其中一个字段在值中,你就无法实现唯一性

您可以在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可以非常轻松和有效。

我在很多情况下都使用它(会话、InterProcessCommunication、持久性、实时消息、光数据存储、lua中的geopos计算…)我喜欢它。更多信息

最新更新