猫鼬$ inc更新很多不能用非数字参数递增

时间:2020-01-23 11:07:31

标签: node.js mongodb mongoose

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" 

我将不胜感激任何帮助或解决此问题的代码段。 谢谢:)

1 个答案:

答案 0 :(得分:1)

仅由于您的Profile模型模式将subscription_plan定义为String和{{1} }仅适用于数字字段。

要么更改该字段的模式类型,要么使用aggregate pipeline通过创建具有一组聚合管道操作的管道来更新值,即1)获取当前值,2)将其转换为数字使用$toInt的值,3)使用$subtract减小值,以及4)使用$toString将新值设置回字符串:

$inc