node.js - 猫鼬查询中的字符串插值
问题描述
我需要在猫鼬查询中通过引用传递值。我必须更新我的 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"}}
解决方案
看起来它只是一个语法错误,只需添加这样的大括号:
[`data.${category}`]
let qry = User.findOneAndUpdate({username: obj.username}, {$push:{[`data.${category}`]:newBill}});
推荐阅读
- php - docker-up 时 mysql connexion 出现 Docker 错误
- ios - 像 presentViewController 一样为 UINavigationController pushViewController 设置动画?
- asp.net - 使用 asp .net core 3 的 Web 安全审计问题
- notepad++ - Notepad++ - 关闭选项卡时如何重新启用 alt+n 快捷方式
- docker - 如何保留 Jenkins 制作的本地 docker 镜像?
- python - 我的 bat 文件没有为“使用 python 自动化无聊的东西”的第 6 章中的 Password Locker 项目运行 pause.exe
- python - 完全迷失了如何实现保存/加载功能(初学者!!)
- c - 如何将 recvfrom() 中的缓冲区值保存到数组中?
- javascript - 如何遍历第 3 方解析器生成的 AST?
- c# - Visual Studio 坚持要我添加对已安装 NuGet 包的旧版本的引用