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

时间:2017-07-24 09:12:08

标签: json node.js mongodb mongoose

这是json对象的结构,位于一个名为campaignResponse的字段中。

 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。我想通过变量传递它。所以在某个时刻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);
                                        }
                                    })  

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

1 个答案:

答案 0 :(得分:1)

对不起,我错过了关于它充满活力的部分......

应该是

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);
                                    }
                                })  

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