更新对象mongodb下的多个键值

时间:2018-12-17 12:27:31

标签: mongodb

我有一个像这样的数据集:

{
    "_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})

但这将是语法错误。

让我们说前端人员想更改用户名和电子邮件计数器,然后我将如何处理,任何建议都非常感谢。

1 个答案:

答案 0 :(得分:0)

您需要使用[]将动态键包装在javascript对象中,这不是mongo专用的。

const filter = {
  [`registration_fields.${req.body.name}`]: 1,
  [`registration_fields.${req.body.username}`]: 1,
  [`registration_fields.${req.body.email}`]: 1,
};