2016-03-06 66 views
0

我是Mongodb的新手,我一直試圖讓嵌入式數組工作。在插入時,我可以插入數組的第一個元素而沒有問題。但是,當我更新時,它會一直拋出一個'0不是對象'的錯誤,該錯誤對於錯誤消息是模糊的。我能做些什麼來解決它?在將新對象插入到嵌入式陣列時遇到困難

這裏是我的架構:

FightCards.schema = new SimpleSchema({ 
    event_id: { 
     type: Number 
    }, 
    player_id: { 
     type: String 
    }, 
    fighters: { 
     type: [Object] 
    }, 
    'fighters.$.id': { 
     type: Number 
    }, 
    'fighters.$.name': { 
     type: String 
    }, 
    'fighters.$.salary': { 
     type: Number 
    } 
}); 

這裏是有問題的代碼:

if(FightCards.find({}).count() == 0) { 
      FightCards.insert(
       {event_id: this.props.event_id, player_id: Meteor.userId(), fighters: [ {id: fighter.id, name: fighter.first_name + " " + fighter.last_name, salary: salary} ]}, 
       (err, res) => { 
        if(err) console.log(err); 
       } 
      ); 
} else { 
      FightCards.update({event_id: this.props.event_id, player_id: Meteor.userId()}, 
       { $push: { fighters: [{id: fighter.id, name: fighter.first_name + " " + fighter.last_name, salary: salary}]}}, 
       (err, res) => { 
        if(err) console.log(err); 
       } 
      ); 
} 

回答

2

你試圖把陣列到陣列上,你只需要推動元素。變化:

{ $push: { fighters: [{ id: fighter.id, name: fighter.first_name + " " + 
    fighter.last_name, salary: salary }]}}, 

{ $push: { fighters: { id: fighter.id, name: fighter.first_name + " " + 
    fighter.last_name, salary: salary }}}, 

您也可以通過簡化自$push一旦設置了查詢你的代碼將創建數組,如果它不存在:

let query = { 
    event_id: this.props.event_id, 
    player_id: Meteor.userId()}, 
    { $push: { fighters: { 
    id: fighter.id, 
    name: fighter.first_name + " " + fighter.last_name, 
    salary: salary 
    }} 
}; 

if(FightCards.find({}).count()) { 
    FightCards.update(query,(err, res) => { 
    if(err) console.log(err); 
    }); 
} else { 
    FightCards.insert(query,(err, res) => { 
    if(err) console.log(err); 
    }); 
} 
+0

謝謝尋求幫助,解決它。 – Craig