我有一个像这样的数据集:
{
"_id" : ObjectId("5c17606f4172b33030144042"),
"registration_attempt" : 5,
"registration_fields" : {
"name" : 20,
"username" : 15,
"password" : 0,
"email" : 0
},
}
我想在API请求的特定字段上增加计数器1。
假设我想将名称密码和电子邮件计数器增加1,所以我知道将通过该查询执行操作,但不适用于req.body.key方法
查询是:
db.Collectionname.update({"_id" : ObjectId("5c17606f4172b33030144042")}, {$inc: {registration_fields.name": 1, "registration_fields.username": 1, "registration_fields.email": 1}})
通过此查询值将被更新,但是此操作通过前端要更新的字段通过API完成。
我尝试过这种方法:
let filter = {registration_fields."+req.body.name: 1, "registration_fields."+req.body.username: 1, "registration_fields."+req.body.email: 1}
db.Collectionname.update({"_id" : ObjectId("5c17606f4172b33030144042")}, {$inc: filter})
但这将是语法错误。
让我们说前端人员想更改用户名和电子邮件计数器,然后我将如何处理,任何建议都非常感谢。
答案 0 :(得分:0)
您需要使用[]
将动态键包装在javascript对象中,这不是mongo专用的。
const filter = {
[`registration_fields.${req.body.name}`]: 1,
[`registration_fields.${req.body.username}`]: 1,
[`registration_fields.${req.body.email}`]: 1,
};