无法更新数组内的元素

时间:2015-01-04 08:49:01

标签: node.js mongodb nedb

让我说我有这个

userinfo={
    userDetails:
    {
        username:"",
        password:"",
        cookie:"",
        firstname:"",
        lastname:"",
        phonenumber:"",
        postalcode:"",
        country:""
    },
    applicationsInfo:[
        {
            application:"",
            consumerKey:"",
            accessToken:""
        }
    ]
}

首先我创建了用户,后者我在用户创建应用程序时更新applicationsInfo部分。首先,我尝试了这种方式,它的工作原理

var consumerKey="asdyfsatfdtyafydsahyadsy";
var findCon={"userDetails.username":"someName"};
db.find(findCon,function(err,docs){
    if(err){
        console.log(err);
    }else{
        var updateCon={$set:{"applicationsInfo.0.consumerKey":consumerKey}};
        db.update(findCon,updateCon,{},function(err,docs){
            console.log(docs);
        });
    }
});

但实际上我想要的是更新一些我用这种方式试过的选择。

........
var appNum=0;
var updateCon={$set:{"applicationsInfo."+appNum+".consumerKey":consumerKey}};

然后我启动我的节点服务器然后我得到这样的错误。

/home/jobs/nodeserver/routes/initusers.js:180
             "applicationsInfo."+appNum+
                                ^
             SyntaxError: Unexpected token +
                   at Module._compile (module.js:439:25)
                   at Object.Module._extensions..js (module.js:474:10)
                   at Module.load (module.js:356:32)
                   at Function.Module._load (module.js:312:12)
                   at Module.require (module.js:364:17)
                   at require (module.js:380:17)

1 个答案:

答案 0 :(得分:1)

您需要按以下方式设置:

var appNum = 0;
var updateCon = {$set:{}};
updateCon.$set["applicationsInfo."+appNum+".consumerKey"] = 1;

在java脚本中不允许在初始化期间将表达式("applicationsInfo."+appNum+".consumerKey")设置为对象的键。