使用$ set中的一个variables更新mongodb和node.js

我正在制定一个投票系统,投票是通过链接完成的。 在我的index.js中,我得到了所需的值,并把它们放在variables中。 “types”variables代表我需要更新的MongoDB中的字段,我已经把它放在一个variables中,因为它取决于哪个链接被点击。

现在在$ set函数中,它们需要db字段和一个新值,两者都使用variables,但是我的“type”variables不起作用。 而当我去到我的MongoDB有一个新的表格创build所谓的“types”。 这怎么解决?

router.get('/vote/:Id/:Value/:Type', function(req, res) { var db = req.db; var id = req.params.Id; var type = req.params.Type; var value = parseInt(req.params.Value); var newValue = value + 1; var collection = db.get('games'); collection.update( {"_id" : id}, {$set: {type: newValue}} , function (err, doc) { if (err) { res.send("There was a problem"); } else { res.location("../../../admin"); res.redirect("../../../admin"); } }); 

});

在JavaScript中,你不能使用variables作为对象文字中的属性名称,这就是你正在做的。

尝试一下:

 var a = 'someProperty'; var o = {a: 'somePropertyValue'}; console.log(o); 

将打印{ a: 'somePropertyValue' }不是{someProperty:'somePropertyValue}

如果JavaScript允许在对象文字表示法中引用属性名称中的variables,则必须除去不加引号的名称,因为这会导致不明确的名称。 a应该被用作属性的值还是应该是variablesa的值?

尝试使用事先创build的对象crate创build更新对象文本,而不使用对象文字符号,因此您的代码如下所示:

 router.get('/vote/:Id/:Value/:Type', function(req, res) { var db = req.db; var id = req.params.Id; var type = req.params.Type; var value = parseInt(req.params.Value); var newValue = value + 1; var collection = db.get('games'); //We create the $set property/value pair using property assignment, not the object literal var updateVal = {}; updateVal[type] = newValue; collection.update( {"_id" : id}, {$set: updateVal} //use it here , function (err, doc) { if (err) { res.send("There was a problem"); } else { res.location("../../../admin"); res.redirect("../../../admin"); } } ); }); 

更好的是,预先构build整个$set操作。