2016-03-06 69 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