【问题标题】:Update a json object inside a mongodb collection: mongoose [duplicate]更新 mongodb 集合中的 json 对象:mongoose [重复]
【发布时间】:2017-12-29 19:15:10
【问题描述】:

这是位于名为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。我想通过一个变量来传递它。所以在某一时刻variable = camp1。我想将campaignResponse.variable 设置为obj。但是我收到一个语法错误,说“Unexpected token .”。

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

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

【问题讨论】:

  • 你基本上需要做类似var update = { "$set": { "campaignSummary": temp } }; update['campaignResponse.' + variable] = obj; 或者更多的 ES6"ish" { "$set": { "campaignSummary": temp, ['campaignReponse.'+variable]: obj } } 但方法显示在链接的副本中。
  • @NeilLunn 成功了,谢谢:D

标签: json node.js mongodb mongoose


【解决方案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);
                                    }
                                })  

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

【讨论】:

  • 我试过这样做。如果我这样做,它不会将变量解释为 camp1。因此,它在campaignResponse 中添加了一个名为“variable”的新字段。
猜你喜欢
  • 2018-02-21
  • 2021-07-21
  • 1970-01-01
  • 2020-11-07
  • 1970-01-01
  • 2015-12-12
  • 2015-01-31
  • 2015-10-06
  • 2018-02-04
相关资源
最近更新 更多