SailsJS and Mongo unique attribute is ignored

2019-05-01 03:25发布

I cant seem to get the unique attribute to actually check/validate for unique values while using Mongo in SailsJS. I end up with identical usernames easily. Any thoughts? I checked the other post about this, but that was related to using Disk/Memory databases.

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

Model:

module.exports = {

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

Connections.js config file

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

3条回答
小情绪 Triste *
2楼-- · 2019-05-01 03:28

Have you tried:

  • Stop sails
  • Manually delete the relevant database + tables
  • Start sails
  • Try again

When you create a collection, the unique index is created at that point so if you're adding the unique attribute after you created the collection without it, it probably won't work. Using the mongodb driver directly will probably give you an error but since Waterline is agnostic, it probably doesn't care.

查看更多
聊天终结者
3楼-- · 2019-05-01 03:29

I've created a hook module that ensures indexes are created in all environments https://github.com/didil/sails-hook-mongo-auto-index . Hope it helps , suggestions are welcome

查看更多
戒情不戒烟
4楼-- · 2019-05-01 03:30

Answered on GitHub here: https://github.com/balderdashy/sails-mongo/issues/181

When you have migrate: 'safe' set Waterline will not attempt to create any indexes on the database. Unique works by using the unique indexes created on the database during a "migration".

If you are in a production environment, you should create the indexes yourself and keep migrate: 'safe' set so that Waterline isn't touching your production data. In development you can set migrate: 'alter' and these indexes should be created.

查看更多
登录 后发表回答