2017-03-26 38 views
1

我目前在学习Nodejs/Mongodb。我的“小”项目包含从REST API获取数据,并将其写入MongoDB。如何用变量键保存json对象到mongodb(mongoose)

首先,猫鼬部分:

var Schema = mongoose.Schema; 

var SummonerSchema = new Schema({ 

    id : Number, 
    name : String, 
    profileIconId : Number, 
    revisionDate : Number, 
    summonerLevel : Number 

}); 

var Summoner = mongoose.model('Summoner', SummonerSchema); 

我从REST API,它看起来像这样得到的数据:

JSON响应

{ 
    "23741875": { 
     "summonerLevel": 30, 
     "profileIconId": 785, 
     "revisionDate": 1489937599000, 
     "id": 23741875, 
     "name": "iP0ke" 
    } 
} 

显然,这不是工作,因为我不知道如何正确解决“23741875”。我在运行时得到的是:

{"message":"Cast to ObjectId failed for value \"23741875\" at path \"_id\" for model \"Summoner\"","name":"CastError","stringValue":"\"23741875\"","kind":"ObjectId","value":"23741875","path":"_id"} 

什么是解决此问题的最佳方法?我错过了什么?提前致谢,并为问一个初学者问题而道歉!

+0

什么是你的猫鼬版本? – pankaj005

+0

猫鼬版本是4.4.12 –

+0

你为什么使用这个ID号码? –

回答

0

我还挺解决它......我改变了架构如下:

var SummonerSchema = new Schema({ 
    _id: Number, 
    name : String, 
    profileIconId : Number, 
    summonerLevel : Number 
    }); 

对于创造的一部分,我所做的就是

for (var key in SummonerDto){ 
    Summoner.create({ 
     _id : SummonerDto[key].id, 
     name : SummonerDto[key].name, 
     profileIconId : SummonerDto[key].profileIconId, 
     summonerLevel : SummonerDto[key].summonerLevel 
    }, function(err){ 
     if(err) 
      console.log(err); 
    }); 
} 

现在这完美的作品,但我知道我现在必须自己管理the_ids。但是,我从RACK API获取数据的保证,该ID将是唯一的。

相关问题