SailsJS 1.0:Mongo 中模型的 .create() 错误,单向关联到存储在 MySQL 中的模型

     2023-02-24     225

关键词:

【中文标题】SailsJS 1.0:Mongo 中模型的 .create() 错误,单向关联到存储在 MySQL 中的模型【英文标题】:SailsJS 1.0 : Error in .create() for a model in Mongo with One Way Association to a model stored in MySQL 【发布时间】:2019-01-13 05:16:58 【问题描述】:

我有一个 Users 模型存储在 MongoDb 和一个 UserTypes 模型存储在 MySQL

当我尝试创建新用户时:

Users.create(name: "Shivam", userType: 1)

我收到以下错误:

 AdapterError: Unexpected error from database adapter: Invalid replacement foreign key value provided for association (`userType`).  Cannot interpret `1` as a Mongo id.


(Usually, this is the result of a bug in application logic.)
For more info on Mongo ids, see:
• https://docs.mongodb.com/manual/reference/bson-types/#objectid
• http://sailsjs.com/support


    at _afterPotentiallyFinding (/My_Project_Root//node_modules/waterline/lib/waterline/methods/find-or-create.js:258:17)
    at _afterPotentiallyRunningAfterLC (/My_Project_Root//node_modules/waterline/lib/waterline/methods/find-one.js:328:20)
    at _maybeRunAfterLC (/My_Project_Root//node_modules/waterline/lib/waterline/methods/find-one.js:322:20)
    at _afterFetchingRecords (/My_Project_Root//node_modules/waterline/lib/waterline/methods/find-one.js:324:13)
    at _afterGettingPopulatedPhysicalRecords (/My_Project_Root//node_modules/waterline/lib/waterline/utils/query/help-find.js:754:12)
    at /My_Project_Root//node_modules/waterline/lib/waterline/utils/query/help-find.js:151:16
    at Object.success (/My_Project_Root//node_modules/sails-mongo/lib/private/do-with-connection.js:254:18)
    at /My_Project_Root//node_modules/machine/lib/private/help-build-machine.js:1354:30
    at _tryToRunCb (/My_Project_Root//node_modules/parley/lib/private/Deferred.js:542:20)
    at /My_Project_Root//node_modules/parley/lib/private/Deferred.js:755:16
    at /My_Project_Root//node_modules/machine/lib/private/help-build-machine.js:966:24
    at Function.handlerCbs.success (/My_Project_Root//node_modules/machine/lib/private/help-build-machine.js:826:26)
    at Object.fn (/My_Project_Root//node_modules/sails-mongo/lib/private/machines/release-connection.js:77:18)
    at wrapper (/My_Project_Root//node_modules/@sailshq/lodash/lib/index.js:3275:19)
    at Deferred.parley.now.flaverr.name [as _handleExec] (/My_Project_Root//node_modules/machine/lib/private/help-build-machine.js:1068:17)
    at Deferred.exec (/My_Project_Root//node_modules/parley/lib/private/Deferred.js:679:10)
    at Deferred.switch (/My_Project_Root//node_modules/machine/lib/private/help-build-machine.js:1306:16)
    at /My_Project_Root//node_modules/sails-mongo/lib/private/do-with-connection.js:242:92
    at /My_Project_Root//node_modules/sails-mongo/lib/private/do-with-connection.js:123:18
    at Object.success (/My_Project_Root//node_modules/sails-mongo/lib/private/build-std-adapter-method.js:61:47)
    at /My_Project_Root//node_modules/machine/lib/private/help-build-machine.js:1354:30
    at _tryToRunCb (/My_Project_Root//node_modules/parley/lib/private/Deferred.js:520:18)
  cause: 
    AdapterError: Unexpected error from database adapter: Invalid replacement foreign key value provided for association (`userType`).  Cannot interpret `1` as a Mongo id.
   (Usually, this is the result of a bug in application logic.)
   For more info on Mongo ids, see:
   • https://docs.mongodb.com/manual/reference/bson-types/#objectid
   • http://sailsjs.com/support
       at _afterPotentiallyFinding (/My_Project_Root//node_modules/waterline/lib/waterline/methods/find-or-create.js:258:17)
       at _afterPotentiallyRunningAfterLC (/My_Project_Root//node_modules/waterline/lib/waterline/methods/find-one.js:328:20)
       at _maybeRunAfterLC (/My_Project_Root//node_modules/waterline/lib/waterline/methods/find-one.js:322:20)
       at _afterFetchingRecords (/My_Project_Root//node_modules/waterline/lib/waterline/methods/find-one.js:324:13)
       at _afterGettingPopulatedPhysicalRecords (/My_Project_Root//node_modules/waterline/lib/waterline/utils/query/help-find.js:754:12)
       at /My_Project_Root//node_modules/waterline/lib/waterline/utils/query/help-find.js:151:16
       at Object.success (/My_Project_Root//node_modules/sails-mongo/lib/private/do-with-connection.js:254:18)
       at /My_Project_Root//node_modules/machine/lib/private/help-build-machine.js:1354:30
       at _tryToRunCb (/My_Project_Root//node_modules/parley/lib/private/Deferred.js:542:20)
       at /My_Project_Root//node_modules/parley/lib/private/Deferred.js:755:16
       at /My_Project_Root//node_modules/machine/lib/private/help-build-machine.js:966:24
       at Function.handlerCbs.success (/My_Project_Root//node_modules/machine/lib/private/help-build-machine.js:826:26)
       at Object.fn (/My_Project_Root//node_modules/sails-mongo/lib/private/machines/release-connection.js:77:18)
       at wrapper (/My_Project_Root//node_modules/@sailshq/lodash/lib/index.js:3275:19)
       at Deferred.parley.now.flaverr.name [as _handleExec] (/My_Project_Root//node_modules/machine/lib/private/help-build-machine.js:1068:17)
       at Deferred.exec (/My_Project_Root//node_modules/parley/lib/private/Deferred.js:679:10)
       at Deferred.switch (/My_Project_Root//node_modules/machine/lib/private/help-build-machine.js:1306:16)
       at /My_Project_Root//node_modules/sails-mongo/lib/private/do-with-connection.js:242:92
       at /My_Project_Root//node_modules/sails-mongo/lib/private/do-with-connection.js:123:18
       at Object.success (/My_Project_Root//node_modules/sails-mongo/lib/private/build-std-adapter-method.js:61:47)
       at /My_Project_Root//node_modules/machine/lib/private/help-build-machine.js:1354:30
       at _tryToRunCb (/My_Project_Root//node_modules/parley/lib/private/Deferred.js:520:18)
     name: 'AdapterError',
     adapterMethodName: 'create',
     modelIdentity: 'users',
     raw: 
       Error: Invalid replacement foreign key value provided for association (`userType`).  Cannot interpret `1` as a Mongo id.
      (Usually, this is the result of a bug in application logic.)
      For more info on Mongo ids, see:
      • https://docs.mongodb.com/manual/reference/bson-types/#objectid
      • http://sailsjs.com/support
          at /My_Project_Root//node_modules/sails-mongo/lib/private/machines/private/reify-values-to-set.js:95:35
          at /My_Project_Root//node_modules/@sailshq/lodash/lib/index.js:3253:15
          at baseForOwn (/My_Project_Root//node_modules/@sailshq/lodash/lib/index.js:2223:14)
          at /My_Project_Root//node_modules/@sailshq/lodash/lib/index.js:3223:18
          at Function.<anonymous> (/My_Project_Root//node_modules/@sailshq/lodash/lib/index.js:3526:13)
          at reifyValuesToSet (/My_Project_Root//node_modules/sails-mongo/lib/private/machines/private/reify-values-to-set.js:68:5)
          at Object.fn (/My_Project_Root//node_modules/sails-mongo/lib/private/machines/create-record.js:58:7)
          at wrapper (/My_Project_Root//node_modules/@sailshq/lodash/lib/index.js:3275:19)
          at Deferred.parley.now.flaverr.name [as _handleExec] (/My_Project_Root//node_modules/machine/lib/private/help-build-machine.js:1068:17)
          at Deferred.exec (/My_Project_Root//node_modules/parley/lib/private/Deferred.js:679:10)
          at Deferred.switch (/My_Project_Root//node_modules/machine/lib/private/help-build-machine.js:1306:16)
          at Object.during (/My_Project_Root//node_modules/sails-mongo/lib/private/build-std-adapter-method.js:74:18)
          at _makeCallToDuringFn (/My_Project_Root//node_modules/sails-mongo/lib/private/do-with-connection.js:109:17)
          at /My_Project_Root//node_modules/sails-mongo/lib/private/do-with-connection.js:128:7
          at Object.success (/My_Project_Root//node_modules/sails-mongo/lib/private/do-with-connection.js:91:16)
          at /My_Project_Root//node_modules/machine/lib/private/help-build-machine.js:1354:30
          at _tryToRunCb (/My_Project_Root//node_modules/parley/lib/private/Deferred.js:542:20)
          at /My_Project_Root//node_modules/parley/lib/private/Deferred.js:755:16
          at /My_Project_Root//node_modules/machine/lib/private/help-build-machine.js:966:24
          at Function.handlerCbs.success (/My_Project_Root//node_modules/machine/lib/private/help-build-machine.js:826:26)
          at Object.fn (/My_Project_Root//node_modules/sails-mongo/lib/private/machines/get-connection.js:61:18)
          at wrapper (/My_Project_Root//node_modules/@sailshq/lodash/lib/index.js:3275:19) code: 'E_CANNOT_INTERPRET_AS_OBJECTID'  ,
  isOperational: true,
  adapterMethodName: 'create',
  modelIdentity: 'users',
  raw: 
    Error: Invalid replacement foreign key value provided for association (`userType`).  Cannot interpret `1` as a Mongo id.
   (Usually, this is the result of a bug in application logic.)
   For more info on Mongo ids, see:
   • https://docs.mongodb.com/manual/reference/bson-types/#objectid
   • http://sailsjs.com/support
       at /My_Project_Root//node_modules/sails-mongo/lib/private/machines/private/reify-values-to-set.js:95:35
       at /My_Project_Root//node_modules/@sailshq/lodash/lib/index.js:3253:15
       at baseForOwn (/My_Project_Root//node_modules/@sailshq/lodash/lib/index.js:2223:14)
       at /My_Project_Root//node_modules/@sailshq/lodash/lib/index.js:3223:18
       at Function.<anonymous> (/My_Project_Root//node_modules/@sailshq/lodash/lib/index.js:3526:13)
       at reifyValuesToSet (/My_Project_Root//node_modules/sails-mongo/lib/private/machines/private/reify-values-to-set.js:68:5)
       at Object.fn (/My_Project_Root//node_modules/sails-mongo/lib/private/machines/create-record.js:58:7)
       at wrapper (/My_Project_Root//node_modules/@sailshq/lodash/lib/index.js:3275:19)
       at Deferred.parley.now.flaverr.name [as _handleExec] (/My_Project_Root//node_modules/machine/lib/private/help-build-machine.js:1068:17)
       at Deferred.exec (/My_Project_Root//node_modules/parley/lib/private/Deferred.js:679:10)
       at Deferred.switch (/My_Project_Root//node_modules/machine/lib/private/help-build-machine.js:1306:16)
       at Object.during (/My_Project_Root//node_modules/sails-mongo/lib/private/build-std-adapter-method.js:74:18)
       at _makeCallToDuringFn (/My_Project_Root//node_modules/sails-mongo/lib/private/do-with-connection.js:109:17)
       at /My_Project_Root//node_modules/sails-mongo/lib/private/do-with-connection.js:128:7
       at Object.success (/My_Project_Root//node_modules/sails-mongo/lib/private/do-with-connection.js:91:16)
       at /My_Project_Root//node_modules/machine/lib/private/help-build-machine.js:1354:30
       at _tryToRunCb (/My_Project_Root//node_modules/parley/lib/private/Deferred.js:542:20)
       at /My_Project_Root//node_modules/parley/lib/private/Deferred.js:755:16
       at /My_Project_Root//node_modules/machine/lib/private/help-build-machine.js:966:24
       at Function.handlerCbs.success (/My_Project_Root//node_modules/machine/lib/private/help-build-machine.js:826:26)
       at Object.fn (/My_Project_Root//node_modules/sails-mongo/lib/private/machines/get-connection.js:61:18)
       at wrapper (/My_Project_Root//node_modules/@sailshq/lodash/lib/index.js:3275:19)


 code: 'E_CANNOT_INTERPRET_AS_OBJECTID'  

但是,.populate() 工作正常:

Users.findOne('USER_ID_HERE').populate('userType')

产生以下结果:


  id: "USER_ID_HERE",
  name: "Shivam",
  userType: 
    id: 1,
    label: "Student"
  

这是我的模型:

Users.js

module.exports = 

  datastore: 'mongoDb',
  attributes: 
   id: type: 'string', columnName: '_id', required: false,

    name: 
      type: 'string',
      required: false,
      allowNull: true,
      maxLength: 50,
      minLength: 3
    ,

    userType: model: 'usertypes', required: true,
  
;

UserTypes.js

module.exports = 

  datastore: 'default',
  attributes: 

    id: type: 'number', autoIncrement: true,

    label: 
      type: 'string',
      maxLength: 255,
      required: true,
      unique: true
    ,
    createdAt: false,
    updatedAt: false,
    users: collection: 'users', via: 'userType'

  

;

其中default 数据存储为MySQLmongoDb 数据存储为MongoDb

这是版本信息:

Version Info:
     : Sails          : v1.0.2
     : node           : v8.1.2
     : engine (v8)    : 5.8.283.41
     : openssl        : 1.0.2l
     : sails-mongo    : ^1.0.1
     : sails-mysql    : ^1.0.0
     : sails-hook-orm : ^2.0.0-16

我做错了什么?

【问题讨论】:

我还报告了一个Bug:github.com/balderdashy/sails/issues/4484 【参考方案1】:

对于遇到相同问题的其他人,这里有一个修补程序:

使用 MySQL 适配器为所有模型设置 dontUseObjectIds: true

这似乎欺骗了 sails-mongo 适配器,使其不使用 sails-mysql 适配器检查模型外键的 ObjectId。

请注意,这不是一个正确的解决方案,而只是一种解决方法。

【讨论】:

SailsJS 是在视图中显示所有 mongodb 集合的最佳方式

】SailsJS是在视图中显示所有mongodb集合的最佳方式【英文标题】:SailsJSthebestwaytoshowallmongodbcollectionsinview【发布时间】:2014-10-1522:52:22【问题描述】:我尝试在SailsJS中做一个管理面板,我想在视图中显示在connection.js中选择的mongo... 查看详情

无法使用sailsjs在不同模型的方法中找到用户

】无法使用sailsjs在不同模型的方法中找到用户【英文标题】:Can\'tfinduserinadifferentmodel\'smethodwithsailsjs【发布时间】:2014-11-2018:52:20【问题描述】:我正在尝试找到一种方法,在不使用多对多的情况下在我的团队模型中获取用户... 查看详情

创建两个模型时的sailsjs错误处理

】创建两个模型时的sailsjs错误处理【英文标题】:sailsjserrorhandlingwhencreatingtwomodels【发布时间】:2016-05-1511:46:33【问题描述】:我是两个nodejs和sails的新手。我试图在一个动作中创建两个模型。我的问题是如何处理两个查询中可... 查看详情

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

...【问题描述】:我正在使用sails-mongo适配器在mongodb中试用sailsJs。向模型添加验证后,当验证失败时,我会收到以下响应。Users.js模型:module.exports=schema:true,attributes:name: 查看详情

在sailsjs中创建新模型后可以更新属性吗?

】在sailsjs中创建新模型后可以更新属性吗?【英文标题】:possibletoupdateapropertyafternewmodeliscreatedinsailsjs?【发布时间】:2019-08-0919:35:11【问题描述】:我正在尝试为模型创建新记录,并且在创建模型后我需要稍后保存一些字段。... 查看详情

Sails js:如何在 Sails js 的单个模型中定义两个 MySQL 连接到两个不同的数据库?

】Sailsjs:如何在Sailsjs的单个模型中定义两个MySQL连接到两个不同的数据库?【英文标题】:Sailsjs:HowcanIdefinetwoMySQLconnectionstotwodifferentdatabasesinasinglemodelinSailsjs?【发布时间】:2016-01-0922:10:47【问题描述】:我创建了一个模型Employee... 查看详情

使用 Mongo/Express/Angular/Node 推送到模型中的数组

】使用Mongo/Express/Angular/Node推送到模型中的数组【英文标题】:PushtoarraywithinamodelusingMongo/Express/Angular/Node【发布时间】:2014-01-2815:15:00【问题描述】:我有一个名为“患者”的模型和一个名为“药物”的模型。每个患者可以服用... 查看详情

Sailsjs Heroku Postgresql 错误:自签名证书

】SailsjsHerokuPostgresql错误:自签名证书【英文标题】:SailsjsHerokuPostgresqlError:selfsignedcertificate【发布时间】:2021-04-1112:38:51【问题描述】:我是sails.js的新手,我部署到heroku并添加了一个herokupostgreql插件。在我的datastore.js文件中,... 查看详情

将 Mongo/Mongoose 对象保存在另一个模型中

】将Mongo/Mongoose对象保存在另一个模型中【英文标题】:SaveMongo/MongooseObjectwithinanotherModel【发布时间】:2019-06-2315:16:37【问题描述】:我有一个看起来像这样的Mongo对象:varfoodSchema=newmongoose.Schema(name:type:String,required:false,unique:true,... 查看详情

在 SailsJS 中实现查询的传递关联

】在SailsJS中实现查询的传递关联【英文标题】:AchieveatransitiveassociationforaqueryinSailsJS【发布时间】:2021-01-0614:12:32【问题描述】:我的问题可能很明显,但是我已经为此苦苦挣扎了几个晚上。这是我的问题的基本概述。我有以下... 查看详情

SailsJS V1 - 蓝图查询无法正常工作

】SailsJSV1-蓝图查询无法正常工作【英文标题】:SailsJSV1-Blueprintquerynotworkingcorrectly【发布时间】:2019-07-0508:57:45【问题描述】:我正在尝试为sailsjsv1模型创建蓝图查询。该模型是一个有2个“选项”的BlogPost。一个是目标,另一个... 查看详情

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

...【发布时间】:2017-03-2415:43:40【问题描述】:我正在尝试SailsJS(v1.0.0-32)的beta版本,但在配置自定义ID时遇到了一些问题。您将在下面找到我当前的配置:modelExample.jsmodule.exports=attributes 查看详情

如何使用sailsjs v0.10连接mongodb?

】如何使用sailsjsv0.10连接mongodb?【英文标题】:Howtoconnectwithmongodbusingsailsjsv0.10?【发布时间】:2014-03-0303:05:37【问题描述】:现在使用sailsjsv0.10。配置connections.js和models.js,改成connection:\'localMongodbServer\',安装npminstallsails-mongo。... 查看详情

如何登录 SailsJS

】如何登录SailsJS【英文标题】:HowtoLoginSailsJS【发布时间】:2014-04-3018:34:59【问题描述】:登录SailsJS的实际语法是什么?文档没有任何内容,但在网站的路线图中找到了以下行“将Sails.log(winston包装器)作为一个单独的模块拉... 查看详情

iOS 中的 Sailsjs SocketIO

】iOS中的SailsjsSocketIO【英文标题】:SailsjsSocketIOiniOS【发布时间】:2014-07-1701:36:06【问题描述】:我很难将我的想法集中在我正在尝试做的基于套接字的聊天应用程序上。我正在为我的服务器端框架使用sailsjs,并尝试使用SocketIO-... 查看详情

Sailsjs:在 Sails 0.11 中,如何不使用带有套接字的 onConnect 生命周期回调

】Sailsjs:在Sails0.11中,如何不使用带有套接字的onConnect生命周期回调【英文标题】:Sailsjs:InSails0.11,howtoNOTuseonConnectlifecyclecallbackwithsockets【发布时间】:2015-05-1823:19:26【问题描述】:在Sails0.11中,onConnect生命周期回调已被套接字... 查看详情

Keras 模型给出了 1.0 的测试精度

】Keras模型给出了1.0的测试精度【英文标题】:KerasModelgivestestaccuracy1.0【发布时间】:2018-04-1717:41:13【问题描述】:下面是预测第二天是涨还是跌的代码(涨=1,跌=0)我所做的是创建一个数据框并预测只是使用PriceChange(今日收... 查看详情

如何在sailsjs 应用程序中使用ES6 导入和反应?

】如何在sailsjs应用程序中使用ES6导入和反应?【英文标题】:HowtouseES6importandreactinasailsjsapp?【发布时间】:2018-12-2117:53:44【问题描述】:我正在尝试更新一个网络应用程序以获取最新的sailsjs和反应版本。该应用程序已经在使用s... 查看详情