如何将带有变量键的json对象保存到mongodb(mongoose)

时间:2017-03-26 21:46:21

标签: json node.js mongodb mongoose

我目前正在学习Nodejs / Mongodb。我的小#34;项目包含从REST API获取数据,并将其写入mongodb。

首先,猫鼬部分:

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"}

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

1 个答案:

答案 0 :(得分: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。但是,我从REST中获取数据的REST API,id将是唯一的。