我试图插入新的竞争对手,如果不存在,否则只更新它,但我得到以下错误:
(node:4628) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): MongoError: Updating the path 'competitors' would create a conflict at 'competitors'这是我对竞争对手的模型:
competitors : [
{
userid: {type: String, default: 'x'},
amount: {type: Number, default: 0},
reward: {type: Number, default: 0},
}],
下面是正在运行的代码段,但是失败并复制代码
var newInsertMent = {userid: user._id, amount: 0};
return Competition_global.findOneAndUpdate(
{"competitors.userid": user._id, _id: globalCompetition._id},
{ $addToSet: {"competitors": newInsertMent}, $inc: {"competitors.$.amount": amount}},
{upsert: true,new: true}
).then(function (competitionUpdate) {
console.log(competitionUpdate);
return competitionUpdate;
});问:我在这里做错了什么,为什么会造成冲突?
发布于 2021-03-13 23:02:44
在我最近的项目中,我试图完成同样的事情,但也犯了同样的错误。我用两个查询解决了我的问题
首先,让我们找到用户的存在并存储结果。
let result = Competition_global.findOne(
{"competitors.userid": user._id, _id: globalCompetition._id}
});通过使用结果(如果找不到用户),然后在竞争对手数组中推送新的user对象。
if (result === null) {
let result = await Competition_global.insertOne(
{
$push: {
// your new user data
},
}
);
} 否则,更新用户数量
else {
let result = await Competition_global.updateOne(
{"competitors.userid": user._id, _id: globalCompetition._id},
{
$inc: {"competitors.$.amount": amount},
}
);
}
});发布于 2019-12-17 14:40:49
这是已知的猫鼬的#7003问题(可能是mongodb)
https://stackoverflow.com/questions/48863956
复制相似问题