Search code examples
sails.jssails-mongo

Sails v1.0: error while using custom primary key with mongo


I'm giving a try to the beta version of SailsJS (v1.0.0-32) and I'm having some issues while configuring a custom id. Bellow you'll find my current configuration:

The modelExample.js

module.exports = {

  attributes: {
    id:{
      type: 'string',
      columnName: '_id'
    },
    attr: {
      type: 'number'
    }
  }
}

The model config config/models.js

attributes: {
    createdAt: { type: 'number', autoCreatedAt: true, },
    updatedAt: { type: 'number', autoUpdatedAt: true, },
    id: { type: 'string', columnName: '_id' },
}

The element trying to be inserted:

{id:"600000", attr:40}

The error I get when trying to create a record with an attribute "id" included in the element trying to be created:

AdapterError: Unexpected error from database adapter: Invalid primary key value provided for `id`.  Cannot interpret `600000` as a Mongo id.
(Usually, this is the result of a bug in application logic.)

Seems that mongo does not like the string 600000 as an id, but I'm not sure if maybe I'm misunderstanding something related to ids in mongo. In the old version of sails, I never had this issue since the id override was straightforward.

For more information, the sails-mongo adapter version is: "sails-mongo": "^1.0.0-5"


Solution

  • In order to use non-ObjectID primary keys with sails-mongo in Sails 1.0, you have to set dontUseObjectIds: true in your model, for example:

    // api/models/User.js
    module.exports = {
      dontUseObjectIds: true,
      attributes: {
        id: { type: 'number', columnName: '_id' }, // <-- still need to set `columnName`!
        name: { type: 'string' },
        ...etc...
      }
    }
    

    This is implemented as of sails-mongo v1.0.0-7.