【发布时间】:2013-03-12 12:59:04
【问题描述】:
是否可以在 mongoose 中有一系列替代子文档模式?
例如,假设这个场景:如果我有一个人的主模式并且我有一个名为车辆类型数组的字段,我希望能够定义子文档模式,但是对于每种车辆类型(汽车、摩托车、自行车、公共汽车等):
var car = new mongoose.Schema({
make: { type: String, required: true, default: 'Ford', trim: true },
model: { type: String, trim: true },
wheels: Number,
});
var motorbike = new mongoose.Schema({
make: { type: String, required: true, default: 'Honda', trim: true },
model: { type: String, trim: true },
seats: Number,
});
var bike = new mongoose.Schema({
make: { type: String, required: true, default: 'MuddyFox', trim: true },
model: { type: String, trim: true },
lights: Number,
});
var bus = new mongoose.Schema({
make: { type: String, required: true, default: 'MAN', trim: true },
model: { type: String, trim: true },
dents: Number,
});
/* person */
var person = new mongoose.Schema({
name: { type: String, required: true, default: 'Joe Bloggs', trim: true },
timeCreated: { type: Date, required: true, default: Date.now },
vehicles: [car, motorbike, bike, bus] /* this is what i want to do */
});
db.model('person', person);
注意人员架构。
因此该人可以拥有这些车辆中的任何一辆,但每辆车的数据仍会根据其自己的架构进行验证。
提前致谢
【问题讨论】:
-
我什至没有意识到在 SO 上发帖 2 个月后可能没有 cmets!
-
哇,这正是我一直在寻找的问题,但遗憾的是,没有人回答。你有想过吗?
-
很遗憾没有!我认为在任何情况下都不可能。对于每个子文档(车辆),您最好使用不同的集合,然后使用车辆数组来存储 _ids - 此外,我也会将所有者 _id 存储在每个车辆模式中。
-
我认为您可以通过手动验证来做到这一点,例如在
pre('save') -
感谢大家的贡献。这是一个重要的问题,看到 mongoose 通常如何抵消无模式数据库的优势,我希望这将在 mongoose 核心中得到解决。