SailsJS:设置autoPK:false仍会生成mongodb的id属性

时间:2015-03-27 19:12:56

标签: node.js mongodb sails.js waterline sails-mongo

使用SailsJS,我试图找出如何使用自动递增的自定义主键作为整数。

为此,我通过autoPK:false,但我看到mongo仍然使用UUID的'id'字段,就好像Waterline忽略了我的 autoPK 条目。

例如,我定义了这个模型(为mongodb配置)

module.exports = {
  autoPK: false,
  attributes: {
    name:'string',
    personalId: {
      type: 'integer',
      autoIncrement:true,
      primaryKey: true
    }
  }
}

以下是sails console的输出:

sails> User.create({name:'Mike'}).exec(console.log)
undefined
sails> null { name: 'Mike',
  createdAt: Fri Mar 27 2015 22:11:51 GMT+0300 (IDT),
  updatedAt: Fri Mar 27 2015 22:11:51 GMT+0300 (IDT),
  id: '5515ab77ac1085260b221cfd' }

我希望看到personalId:1或类似的内容,而不是id:'5515ab77ac1085260b221cfd'

感谢。

1 个答案:

答案 0 :(得分:2)

  1. Mongo在Sails中的自动增量不能依次为1,2,3等。它总是Mongo的ObjectId
  2. Sails中的
  3. id字段是必要的,因为许多约定仍然使用它。照看蓝图动作,actionUtil等。
  4. 所以这是我的解决方案,请使用此模型配置:

    module.exports = {
      autoPK: false,
      attributes: {
        name:'string',
        id: {,
          autoIncrement:true,
          primaryKey: true,
          columnName: 'personalId'
        }
      }
    }
    

    它仍然不会在Mongo中生成personalId作为列名,但它将使用Mongo的默认id约定_id。如果您将数据库切换到另一个数据库(如MySQL),将生成personalId