Mongodb Mongoose在会话上创建验证失败

Mongodb Mongoose在会话上创建验证失败,mongodb,mongoose,Mongodb,Mongoose,我正在尝试使用MongoDB+async..Wait programming+session/transaction control(等待编程+会话/事务控制)在现有集合上创建一个文档(以便在出现任何错误时能够回滚到以前的状态)。相关代码如下所示: exports.campaign\u totalize=async(活动、开始日期、结束日期、现在)=>{ var session=wait mongoose.startSession(); session.startTransaction(); 试

我正在尝试使用MongoDB+async..Wait programming+session/transaction control(等待编程+会话/事务控制)在现有集合上创建一个文档(以便在出现任何错误时能够回滚到以前的状态)。相关代码如下所示:

exports.campaign\u totalize=async(活动、开始日期、结束日期、现在)=>{
var session=wait mongoose.startSession();
session.startTransaction();
试一试{
// ...
让佣金=等待佣金模型.create({
datetime:Date.now(),
数值:10,
状态:“已发布”,
附属公司:附属公司id,
活动:活动id
},{届会:届会});
// ...
}
// ...
}捕捉(错误){
log(“错误合计佣金:”,err);
等待会话。中止Transaction();
session.endSession();
犯错误;
}
}
执行上面的代码,所有字段都会出现ValidationError(即使确保它们都正常)。但是,如果删除session参数,一切正常!集合确实存在

以下是有关我的环境的信息:

“依赖项”:{
“快车”:“^4.16.4”,
“猫鼬”:“^5.3.9”,
“猫鼬bcrypt”:“^1.6.0”,
“验证程序”:“^10.9.0”
}
$node—版本
v10.14.0
$mongod--版本
db版本(v3.6.3)->v4.0.4
多谢各位

更新:

正如Shivam Pandey在评论中指出的,mongoDB版本开始支持4.0版上的事务。我刚刚将其更新为4.0.4,但它返回了相同的错误

更新2: 堆栈跟踪:

Trace: error
    at Object.exports.campaign_totalize (/home/luiz/magalabs/magafilio/magafilio-server/logic/commission_calc.js:147:17)
    at process._tickCallback (internal/process/next_tick.js:68:7)
Error totalizing commissions: { ValidationError: Commission validation failed: campaign: All commissions must be associated to a campaign, affiliate: All commissions must be associated to an affiliate, status: Commission needs a status associated, value: Commission needs a value - use 0 for no valued commissions, datetime: Commission needs date/time info
    at ValidationError.inspect (/home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/error/validation.js:59:24)
    at formatValue (internal/util/inspect.js:453:31)
    at inspect (internal/util/inspect.js:193:10)
    at Object.formatWithOptions (util.js:165:18)
    at Console.(anonymous function) (console.js:188:15)
    at Console.log (console.js:199:31)
    at Object.exports.campaign_totalize (/home/luiz/magalabs/magafilio/magafilio-server/logic/commission_calc.js:148:17)
    at process._tickCallback (internal/process/next_tick.js:68:7)
  errors:
   { campaign:
      { ValidatorError: All commissions must be associated to a campaign
          at new ValidatorError (/home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/error/validator.js:29:11)
          at validate (/home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/schematype.js:844:13)
          at /home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/schematype.js:897:11
          at Array.forEach (<anonymous>)
          at ObjectId.SchemaType.doValidate (/home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/schematype.js:853:19)
          at /home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/document.js:1893:9
          at process._tickCallback (internal/process/next_tick.js:61:11)
        message: 'All commissions must be associated to a campaign',
        name: 'ValidatorError',
        properties: [Object],
        kind: 'required',
        path: 'campaign',
        value: undefined,
        reason: undefined,
        [Symbol(mongoose:validatorError)]: true },
     affiliate:
      { ValidatorError: All commissions must be associated to an affiliate
          at new ValidatorError (/home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/error/validator.js:29:11)
          at validate (/home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/schematype.js:844:13)
          at /home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/schematype.js:897:11
          at Array.forEach (<anonymous>)
          at ObjectId.SchemaType.doValidate (/home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/schematype.js:853:19)
          at /home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/document.js:1893:9
          at process._tickCallback (internal/process/next_tick.js:61:11)
        message: 'All commissions must be associated to an affiliate',
        name: 'ValidatorError',
        properties: [Object],
        kind: 'required',
        path: 'affiliate',
        value: undefined,
        reason: undefined,
        [Symbol(mongoose:validatorError)]: true },
     status:
      { ValidatorError: Commission needs a status associated
          at new ValidatorError (/home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/error/validator.js:29:11)
          at validate (/home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/schematype.js:844:13)
          at /home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/schematype.js:897:11
          at Array.forEach (<anonymous>)
          at SchemaString.SchemaType.doValidate (/home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/schematype.js:853:19)
          at /home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/document.js:1893:9
          at process._tickCallback (internal/process/next_tick.js:61:11)
        message: 'Commission needs a status associated',
        name: 'ValidatorError',
        properties: [Object],
        kind: 'required',
        path: 'status',
        value: undefined,
        reason: undefined,
        [Symbol(mongoose:validatorError)]: true },
     value:
      { ValidatorError: Commission needs a value - use 0 for no valued commissions
          at new ValidatorError (/home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/error/validator.js:29:11)
          at validate (/home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/schematype.js:844:13)
          at /home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/schematype.js:897:11
          at Array.forEach (<anonymous>)
          at SchemaNumber.SchemaType.doValidate (/home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/schematype.js:853:19)
          at /home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/document.js:1893:9
          at process._tickCallback (internal/process/next_tick.js:61:11)
        message: 'Commission needs a value - use 0 for no valued commissions',
        name: 'ValidatorError',
        properties: [Object],
        kind: 'required',
        path: 'value',
        value: undefined,
        reason: undefined,
        [Symbol(mongoose:validatorError)]: true },
     datetime:
      { ValidatorError: Commission needs date/time info
          at new ValidatorError (/home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/error/validator.js:29:11)
          at validate (/home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/schematype.js:844:13)
          at /home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/schematype.js:897:11
          at Array.forEach (<anonymous>)
          at SchemaDate.SchemaType.doValidate (/home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/schematype.js:853:19)
          at /home/luiz/magalabs/magafilio/magafilio-server/node_modules/mongoose/lib/document.js:1893:9
          at process._tickCallback (internal/process/next_tick.js:61:11)
        message: 'Commission needs date/time info',
        name: 'ValidatorError',
        properties: [Object],
        kind: 'required',
        path: 'datetime',
        value: undefined,
        reason: undefined,
        [Symbol(mongoose:validatorError)]: true } },
  _message: 'Commission validation failed',
  name: 'ValidationError' }
跟踪:错误
在Object.exports.campaign_totalize(/home/luiz/magalabs/magafilio/magafilio server/logic/commission_calc.js:147:17)
在进程中。_tick回调(内部/process/next_tick.js:68:7)
佣金合计错误:{ValidationError:佣金验证失败:活动:所有佣金必须关联到活动,附属机构:所有佣金必须关联到附属机构,状态:佣金需要关联状态,值:佣金需要值-使用0表示无值佣金,日期时间:佣金需要日期/时间信息
在ValidationError.inspect(/home/luiz/magalabs/magafilio/magafilio服务器/node_模块/mongoose/lib/error/validation.js:59:24)
at formatValue(internal/util/inspect.js:453:31)
检查时(内部/util/inspect.js:193:10)
位于Object.formatWithOptions(util.js:165:18)
控制台上。(匿名函数)(Console.js:188:15)
在Console.log(Console.js:199:31)
在Object.exports.campaign_totalize(/home/luiz/magalabs/magafilio/magafilio server/logic/commission_calc.js:148:17)
在进程中。_tick回调(内部/process/next_tick.js:68:7)
错误:
{运动:
{ValidatorError:所有佣金必须与活动关联
新验证器错误(/home/luiz/magalabs/magafilio/magafilio服务器/node_模块/mongoose/lib/error/validator.js:29:11)
在验证时(/home/luiz/magalabs/magafilio/magafilio服务器/node_模块/mongoose/lib/schematype.js:844:13)
at/home/luiz/magalabs/magafilio/magafilio服务器/node_模块/mongoose/lib/schematype.js:897:11
在Array.forEach()处
在ObjectId.SchemaType.doValidate(/home/luiz/magalabs/magafilio/magafilio服务器/node_模块/mongoose/lib/SchemaType.js:853:19)
at/home/luiz/magalabs/magafilio/magafilio服务器/node_模块/mongoose/lib/document.js:1893:9
在进程中。_tick回调(内部/process/next_tick.js:61:11)
消息:“所有佣金必须与活动关联”,
名称:“ValidatorError”,
属性:[对象],
种类:'必需',
路径:“活动”,
值:未定义,
原因:未定义,
[符号(mongoose:validatorError)]:true},
使附属:
{ValidatorError:所有佣金必须关联到附属机构
新验证器错误(/home/luiz/magalabs/magafilio/magafilio服务器/node_模块/mongoose/lib/error/validator.js:29:11)
在验证时(/home/luiz/magalabs/magafilio/magafilio服务器/node_模块/mongoose/lib/schematype.js:844:13)
at/home/luiz/magalabs/magafilio/magafilio服务器/node_模块/mongoose/lib/schematype.js:897:11
在Array.forEach()处
在ObjectId.SchemaType.doValidate(/home/luiz/magalabs/magafilio/magafilio服务器/node_模块/mongoose/lib/SchemaType.js:853:19)
at/home/luiz/magalabs/magafilio/magafilio服务器/node_模块/mongoose/lib/document.js:1893:9
在进程中。_tick回调(内部/process/next_tick.js:61:11)
消息:“所有佣金必须关联到附属公司”,
名称:“ValidatorError”,
属性:[对象],
种类:'必需',
路径:'附属',
值:未定义,
原因:未定义,
[符号(mongoose:validatorError)]:true},
地位:
{ValidatorError:委员会需要关联的状态
新验证器错误(/home/luiz/magalabs/magafilio/magafilio服务器/node_模块/mongoose/lib/error/validator.js:29:11)
在验证时(/home/luiz/magalabs/magafilio/magafilio服务器/node_模块/mongoose/lib/schematype.js:844:13)
at/home/luiz/magalabs/magafilio/magafilio服务器/node_模块/mongoose/lib/schematype.js:897:11
在Array.forEach()处
在SchemaString.SchemaType.doValidate(/home/luiz/magalabs/magafilio/magafilio服务器/node_模块/mongoose/lib/SchemaType.js:853:19)
at/home/luiz/magalabs/magafilio/magafilio服务器/node_模块/mongoose/lib/document.js:1893:9
在进程中。_tick回调(内部/process/next_tick.js:61:11)
消息:“委员会需要关联的状态”,
名称:“ValidatorError”,
属性:[对象],
种类:'必需',
路径:“状态”,
瓦尔
Model.create([doc], options)
Model.create(doc, options)
let [commission] = await commissionModel.create([{datetime: Date.now(), 
...}], {session})

let [commission] = await commissionModel.create([doc], options})