【发布时间】:2014-10-24 07:34:00
【问题描述】:
我正在使用 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 在大型阵列上表现不佳(而且建筑物的顺序并不重要)。
【问题讨论】:
-
验证所有内容是什么意思?此外,您不能在 GameStateSchema 中定义值,架构包含类型等,而不是数据。
-
“验证”是指检查强制转换和“模式严格模式”写入数据库。不是更复杂的 Mongoose 验证方法。天哪,是的,对不起,我忘了给数据线做评论!立即编辑。
-
尽管您反对,但您应该在此处使用
buildings的数组。没问题。 -
是的,我认为你是对的,约翰尼。我忽略了 Mongo 没有通配符字段名的事实,所以你只能通过 id 找到建筑物,例如找到所有的灯塔会很痛苦。似乎大型数组的最佳解决方案是将其拆分为较小的数组(如果它对您的数据有意义)。此外,Mongo 2.6 有 $position 修饰符,可以加快处理数组的速度。
-
呃,这是真的吗:搜索数组只能返回一个或所有数组元素(即不可能找到所有灯塔)?!如果是这样,数组绝对不是要走的路。下一次尝试:一个巨大的建筑碎片集合。
标签: mongoose schema subdocument