mongodb - 用于 MongoDB 的 Grails 3 和 FORM 6 - 重复键错误

标签 mongodb grails grails-orm grails3

环境:

  • Grails 3.2.9
  • 用于 MongoDB 3.4.2 的 GORM 6.1.2

  • 这是我的(简化的)域类
    class Cluster {
    
        String name
        String slug
    
        static constraints = {
            name        blank: false, unique: true
            slug        blank: false, unique: true, validator: { return it == it.toLowerCase().replaceAll(/[^\w-]/, '') }
        }
    
        static mapping = {
            collection 'Cluster'
            id name: 'slug'
        }
    
    }
    

    如您所见,我映射了 slug属性为文档_id .

    我可以成功地添加一个文档
    Cluster cluster = new Cluster(name: 'Dallas', slug: 'dal05')
    cluster.insert(failOnError: true)
    

    一切正常。但是如果我执行相同的 insert再次命令我得到一个重复的键异常:
    com.mongodb.MongoBulkWriteException: Bulk write operation error on server localhost:27017. Write errors: [BulkWriteError{index=0, code=11000, message='E11000 duplicate key error index: db.Cluster.$_id_ dup key: { : "dal05" }', details={ }}]
    

    虽然我会期待一个简单的验证错误,说明重复的 key 。

    然而,虽然 unique约束失败,其他两个验证被正确触发(空值或例如'Dal05' - 不允许大写字母-)。

    没有在 slug 上映射 id属性,所以保留默认值 assigned逻辑上,一切都按预期进行。

    我错过了什么吗?提前致谢!

    最佳答案

    看来这实际上是一个错误,计划在即将发布的 GORM 版本 6.1.5 中修复。

    引用。问题:https://github.com/grails/grails-data-mapping/issues/951

    关于mongodb - 用于 MongoDB 的 Grails 3 和 FORM 6 - 重复键错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44004981/

    相关文章:

    node.js - MongoDB 中的集群以及它如何获取核心

    c++ - 查询后未返回任何结果的 MongoDB 套接字异常

    hibernate - Vaadin SQLContainer + Grails 给出错误 "org.postgresql.util.PSQLException: This connection has been closed"

    apache-flex - 如何将某些文件放在Grails服务器的根目录中?

    grails - 如何在 gsp 屏幕上显示来自多个共享共同值的表的数据?

    java - Gorm MongoDB 插件存储 jvm 对象 id 而不是字节数组数据

    Grails 数据绑定(bind)日期格式

    mongodb - 带有聚合的 mgo,使用另一个查询和字段更改进行过滤

    MongoDB - 关闭并显示代码 48

    grails - 在加载虚拟机时访问grails应用