我使用Node(0.10.5)/ Mongo(2.4)/ Mongoose(3.6)构建游戏,我有一个像这样的Mongoose架构......
var GameStateSchema = new Schema(
{
buildings: {
// This object will contain buildings of the same structure, e.g.
// "1": {name: "cabin", x: 128, y: 0},
// "2": {name: "lighthouse", x: 192, y: 64}
// It'll grow to several hundred buildings.
},
nextId: 3
}
);
var BuildingSchema = new Schema(
{
name: String, x: Number, y: Number
}
);
让buildings
个对象中的每个建筑物都使用BuildingSchema
的最佳方法是什么?我真的不想下去手动验证一切的途径!
注意:buildings
对象不是数组,例如buildings: [BuildingSchema]
,因为我听说Mongo对大型阵列表现不佳(而且建筑物的顺序并不重要)。
答案 0 :(得分:0)
buildings: [BuildingSchema]
对象和数组的表示法。例如,如果您添加新建筑......
GameStateSchema.update({$set: {"buildings.1": {name: "cabin", x:128, y: 0} }})
Mongoose将使用BuildingSchema
添加新建筑,进行非常基本(但至关重要)的验证,例如建筑物只能有name
,x
和y
。
如果在$ set items之前没有显式创建buildings
数组,则默认为对象。比特反直觉但非常方便:)
编辑 - 我说得太早了,通过Mongoose模型实例访问buildings
只有当它是一个数组时才能工作。问题仍然存在。