更新MongoDB集合中的json对象:mongoose

这是位于名为campaignResponse的字段之一内的json对象的结构。

campaignResponse: { prop: { summary: 't', retailer: '4', sent: 't', queued: 'f', open: 'f', spam: 't', click: 't', blocked: 'f', bounce: 'f', unsub: 'f', To: 'kartooot@gmail.com', status: 'clicked', subject: '', messageid: '20829150339986762', From: '', details: '', date: '2017-04-03T12:51:38' }, camp2: { date: '2017-04-03T12:51:38', details: '', From: '', messageid: '20829150339986762', subject: '', status: 'clicked', To: 'kartooot@gmail.com', unsub: 'f', bounce: 'f', blocked: 'f', click: 't', spam: 'f', open: 't', queued: 'f', sent: 't', retailer: '4', summary: 'f' }, camp1: { date: '2017-04-03T12:51:38', details: '', From: '', messageid: '20829150339986762', subject: '', status: 'clicked', To: 'kartooot@gmail.com', unsub: 'f', bounce: 'f', blocked: 'f', click: 't', spam: 't', open: 'f', queued: 'f', sent: 't', retailer: '4', summary: 'f' } } 

我想更新道具,camp1,camp2。 我想通过一个variables传递它。 所以有一次variable = camp1 。 我想将campaignResponse.variable设置为obj。 但是我得到一个语法错误,说“意外的令牌”。

 User.findOneAndUpdate({email: res[i].email},{$set: {campaignSummary: temp, campaignResponse.varialble: obj}},{new: true},function(err ,result2){ if(err) callback(err); else{ console.log(result2); callback(err,result2); } }) 

请帮我在这里的人。 甚至build议更好的方式来做到这一点,将不胜感激。 谢谢。

对不起,我错过了关于它是dynamic的部分…

应该

 var $set = {campaignSummary: temp}; $set["campaignResponse."+varialble] = obj; User.findOneAndUpdate({email: res[i].email},{$set:$set},{new: true},function(err ,result2){ if(err) callback(err); else{ console.log(result2); callback(err,result2); } }) 

当使用来自variables的密钥时,你想要的是使用它来连接最后的string,然后在[]语法中使用它来定义正确的属性名称。