首页 > 解决方案 > 猫鼬查询中的字符串插值

问题描述

我需要在猫鼬查询中通过引用传递值。我必须更新我的 Mongodb 文档中的嵌套对象。我现在已经决定硬编码,但最终我需要相应地动态更新更新查询。这是我的代码:

function update(obj, newBill, category) {
    return new Promise(function (resolve, reject) {

        let qry;

        switch (category) {
            case 'internet':
                qry = User.findOneAndUpdate({username: obj.username}, {$push: {"data.internet": newBill}});
                break;
            case 'electricity':
                qry = User.findOneAndUpdate({username: obj.username}, {$push: {"data.electricity": newBill}});
                break;
            case 'water':
                qry = User.findOneAndUpdate({username: obj.username}, {$push: {"data.water": newBill}});
                break;
            case 'gas':
                qry = User.findOneAndUpdate({username: obj.username}, {$push: {"data.gas": newBill}});
                break;
            default:

                break;
        }

        // let qry = User.findOneAndUpdate({username: obj.username}, {$push:{`data.${category}`:newBill}});

        qry.exec(function (err, user) {

            if (err) {
                console.log(err)
                return reject({err: 404})
            } else {
                console.log(user)
                return resolve(JSON.stringify({code: 202, id: user._id}))
            }
        })

    });
}


我要更新的文档

{"_id":{"$oid":"5e6ce0d25484e00d4dabc4cf"},"firstName":"yamin","lastName":"huzaifa","password":"admin1","username":"huz12","data":{"internet":[{"category":"internet","month":"Jan","year":{"$numberInt":"2019"},"amount":{"$numberInt":"70"}},{"test":"234"}],"electricity":[[{"month":"Jan","year":{"$numberInt":"2019"},"amount":{"$numberInt":"70"}}]]},"__v":{"$numberInt":"0"}}

标签: node.jsmongodbmongoose

解决方案


看起来它只是一个语法错误,只需添加这样的大括号:

[`data.${category}`]

let qry = User.findOneAndUpdate({username: obj.username}, {$push:{[`data.${category}`]:newBill}});

推荐阅读