mongodb - Grails中两个域类的值的唯一约束

标签 mongodb grails constraints unique

我有两个域类。一个是:

 class User {
    String login
    String password
    String firstName
    String lastName
    String address
    String email

    static constraints = {
        login blank:false, size:5..15,matches:/[\S]+/, unique:true
        password blank:false, size:5..15,matches:/[\S]+/
        firstName blank:false
        lastName blank:false
        email email: true
    }
 }

其他是
class AddWebsite {

String website
User user
static constraints = { 
                     website blank:false 
                     website(unique: ['user'])
                     }
}

我正在后端使用MongoDB。我需要一个特定的登录值,所有siteURL值都应该是唯一的。例如:登录名= abc@gmail.com。然后,该用户只能在数据库中拥有所有唯一的URL。但是,不同的用户可以使用相同的URL。如何使用唯一约束或任何其他方法来做到这一点?

最佳答案

使用嵌入式子文档在SiteURL内部存储User实例。然后将集合定义为Set,以确保所有条目都是唯一的。如果要使用默认的mongo集合类型或要保留顺序,请定义一个拦截器,如下所示:

def beforeSave = {
  urls = urls.unique() 
}

更新:
如果您的网址是纯字符串,请使用默认的原始集合(不使用hasMany):
class User {
  String login
  //...
  Set urls = new HashSet()
}

关于mongodb - Grails中两个域类的值的唯一约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24244457/

相关文章:

jquery - Python jquery 网页游戏

ios - 快速消除宽高比限制

sql-server - 我可以有复合约束吗?

ios - 基于屏幕高度的约束常数

html - 构建特定复杂表单的最佳实践/模式

mongodb - mongo恢复期间出现异常

mongodb - Robo 3T Sasl失败

postgresql - 为什么 Grails 默认生成非空列?

jquery - 使用更新在remoteFunction之后调整其他选择的值

java - Grails 中的 servletContext 在哪里可用?