处理JSON会创build一个正常的数组而不是JSON对象

来自外部Web API的JSON看起来像这样:

[{matches: [{ "match_something":"123", "match_something_else":"Potato", "match_events": [{ "event_id":"42", "event_desc":"redcard", }, { "event_id":"1", .. }] }, // more matches 

所以,匹配数组和每个匹配的事件数组。

相关的处理代码如下所示:

  _.each(matches, function(match) { var results = new Results({ _id: match.match_id, match_date: match.match_formatted_date, ft_score: match.match_ft_score, match_events:[] }); events = match.match_events; _.each(events, function(event) { results.match_events.push({ _id:event.event_id, match_id:event.event_match_id, type:event.event_type, team:event.event_team, player:event.event_player, }); }); results_array.push(results); }); return results_array 

这是模型的模式(简写为:缩写):

 var resultsSchema = new db.mongoose.Schema({ _id:Number, match_date:String, status:String, ... match_events:[{ _id: Number, match_id: Number, type:String, ... }] }); 

然后,我完成后从数据库(mongo)看到的是以下JSON(为了清晰起见,删除了额外的属性):

 [ {"_id":1931559, "ft_score":"[0-0]","__v":0, "match_events": ["19315591","19315592","19315593","19315594"]}, 

这让我感到困惑。 ID是正确的,我检查服务器数据。 处理代码只是创build这些ID的数组,而不是每个事件的JSON对象。

不应该显示为:

 ..."match_events": [{"_id:" "19315591", ...}] 

您的架构定义是这里的问题。 Mongoose使用“type”关键字来确定数据types,所以它认为“match_events”是一个“String”的数组。

声明像这样:

 var resultSchema = new Schema({ _id: Number, status: String, match_events: [{ _id: { type: Number }, type: { type: String } }] }); 

或者更好的是这样的:

 var eventSchema = new Schema({ _id: Number, type: String }); var resultSchema = new Schema({ _id: Number, status: String, match_events: [eventSchema] });