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