Sails v1.0:在 mongo 中使用自定义主键时出错

Posted

技术标签:

【中文标题】Sails v1.0:在 mongo 中使用自定义主键时出错【英文标题】:Sails v1.0: error while using custom primary key with mongo 【发布时间】:2017-03-24 15:43:40 【问题描述】:

我正在尝试 SailsJS (v1.0.0-32) 的 beta 版本,但在配置自定义 ID 时遇到了一些问题。您将在下面找到我当前的配置:

modelExample.js

module.exports = 

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

模型配置config/models.js

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

试图插入的元素:

id:"600000", attr:40

error 在尝试创建一条记录时,我在尝试创建的元素中包含属性“id”:

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.)

似乎 mongo 不喜欢字符串 600000 作为 id,但我不确定我是否误解了与 mongo 中的 id 相关的内容。在旧版本的风帆中,我从来没有遇到过这个问题,因为 id 覆盖很简单。

更多信息,sails-mongo 适配器版本为:"sails-mongo": "^1.0.0-5"

【问题讨论】:

【参考方案1】:

为了在 Sails 1.0 中使用带有 sails-mongo 的非 ObjectID 主键,您必须在模型中设置 dontUseObjectIds: true,例如:

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

这是从sails-mongo v1.0.0-7 开始实施的。

【讨论】:

以上是关于Sails v1.0:在 mongo 中使用自定义主键时出错的主要内容,如果未能解决你的问题,请参考以下文章

Sails-mongo 适配器,标准化错误消息

如何使用 Sails.JS + GridFS 从 Mongo 检索图像文件?

_id 找不到带有 Mongo 的 Sails.js

Sails mongo 重新连接

如何在 Sails 中捕获 MongoDB 错误

如何在 Sails 中恢复生命周期回调?