【问题标题】:SailsJS and Mongo unique attribute is ignoredSails JS 和 Mongodb 唯一属性被忽略
【发布时间】:2014-08-19 11:30:30
【问题描述】:

在 SailsJS 中使用 Mongo 时,我似乎无法获得唯一属性来实际检查/验证唯一值。我很容易得到相同的用户名。有什么想法吗?我查看了关于此的另一篇文章,但那与使用磁盘/内存数据库有关。

Sails 0.10.x 与sails-mongo@0.10.x

型号:

module.exports = {

  attributes: {
    username:{
        type:'string',
        unique:true,
        required:true
    }
  }
};

Connections.js 配置文件

mongo: {
    adapter: 'sails-mongo',
    host: 'localhost',
    port: 27017,
    schema:true,
    migrate: 'safe',
    database: 'mydatabase'
},

【问题讨论】:

    标签: mongodb sails.js waterline


    【解决方案1】:

    在 GitHub 上回答:https://github.com/balderdashy/sails-mongo/issues/181

    当您设置migrate: 'safe' 时,Waterline 将不会尝试在数据库上创建任何索引。 Unique 通过使用“迁移”期间在数据库上创建的唯一索引来工作。

    如果您在生产环境中,您应该自己创建索引并保持 migrate: 'safe' 设置,这样 Waterline 就不会接触您的生产数据。在开发中你可以设置migrate: 'alter',这些索引应该被创建。

    【讨论】:

    • 看来这个选项现在已经移到models.js而不是connections.js
    • 我试过 'safe'、'alter' 和 'drop' 迁移值——没有一个适用于唯一。如何强制 mongo 创建索引?
    【解决方案2】:

    你试过了吗:

    • 停止航行
    • 手动删除相关数据库+表
    • 启航
    • 再试一次

    当你创建一个集合时,唯一索引是在那个时候创建​​的,所以如果你在没有它的情况下创建集合之后添加唯一属性,它可能不起作用。直接使用 mongodb 驱动程序可能会给你一个错误,但由于 Waterline 是不可知的,它可能不在乎。

    【讨论】:

      【解决方案3】:

      我创建了一个钩子模块,可确保在所有环境中创建索引 https://github.com/didil/sails-hook-mongo-auto-index 。希望对你有帮助,欢迎提出建议

      【讨论】:

        猜你喜欢
        • 2016-06-17
        • 1970-01-01
        • 1970-01-01
        • 2013-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多