Node API,其中包含Mongo的配置文件集合,每个配置文件都具有subscription_plan,代表他们使用应用付费的其余时间。 现在,我在后端的一部分上工作,应将所有配置文件的subscription_plan减少1。 问题是,subscription_plan被声明为String,所以我不能只将其减少1 在这里获得一些提示后,我尝试了此方法:
router.put('/reduceSubscription', async (req, res) => {
try {
const updatedProfiles = await Profile.updateMany({ is_active: true }, [
{
$set: {
subscription_plan: {
$toString: {
$subtract: [{ $toInt: '$subscription_plan' }, 1]
}
}
}
}
]).exec();
console.log(updatedProfiles);
} catch (err) {
res.status(500).send({ msg: err.message });
}
});
在邮递员中测试后,我收到消息:
"msg": "Failed to parse number 'NaN' in $convert with no onError value: Bad digit \"N\" while parsing NaN"
我将不胜感激任何帮助或解决此问题的代码段。 谢谢:)
答案 0 :(得分:1)
仅由于您的Profile
模型模式将subscription_plan
定义为String
和{{1} }仅适用于数字字段。
要么更改该字段的模式类型,要么使用aggregate pipeline通过创建具有一组聚合管道操作的管道来更新值,即1)获取当前值,2)将其转换为数字使用$toInt
的值,3)使用$subtract
减小值,以及4)使用$toString
将新值设置回字符串:
$inc