【发布时间】:2014-10-29 21:39:36
【问题描述】:
来自外部 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 是正确的,我检查了服务器数据。处理代码只是为这些 ID 创建一个数组,而不是为每个事件创建一个 JSON 对象。
不应该显示为:
..."match_events":
[{"_id:" "19315591", ...}]
【问题讨论】:
-
我对这个数据库不熟悉,但是_id不是保留的吗?我的意思是你确定你可以在嵌套结构中定义一个带有 _id 的对象吗?似乎它将其解释为内部链接或类似的东西。我会在没有 _id 的情况下尝试一下...代码似乎还可以,所以这是一个奇怪的错误...
-
是的,问题出在下面的另一个答案中指出的架构声明。我确实删除了 _id 以防万一将来会引起问题。谢谢
-
@inf3rno Mongoose 将使用您在架构中为
_id明确声明的任何“类型”,或者在您未定义的地方隐式添加ObjectId。它甚至会尝试将作为字符串提供的参数“转换”为正确的类型。 -
我不确定这是好是坏。我的意思是如果没有错误消息就很难调试...至少它应该发送
console.warn()...
标签: javascript json node.js mongodb mongoose