假设我将在mongodb中建立多对一的关系,
var mongoose = require('mongoose');
var Schema = mongoose.Schema,
ObjectID = Schema.Types.ObjectId;
var productSchema = new Schema({
supplier: {
_id: ObjectId,
name: String
}
});
我已阅读有关6 Rules of Thumb for MongoDB Schema Design的mongodb博客文章,并阅读:
当读取与更新的比率很高时,非规范化才有意义。如果您经常阅读非规范化数据,但很少更新
由于supplier
不经常更新,我决定让它的名称为denormalize,但仍然有_id
所以当我需要更新它时,我有一些东西要引用。
我决定使用ObjectId
作为type
,但如果它有效,我实际上没有测试过它,我已经想知道,如果我做得对,如果使用{ {1}}类型会更实用。
答案 0 :(得分:2)
你肯定想在那里使用ObjectId
,但也要定义一个ref
来告诉Mongoose它所引用的模型,以便你可以在需要时使用Mongoose的引用population完整的供应商对象:
var productSchema = new Schema({
supplier: {
_id: { type: ObjectId, ref: 'Supplier' },
name: String
}
});
这使您可以执行以下操作:
Product.findById(id).populate('supplier._id').exec(err, product) {
// product.supplier._id is the full Supplier doc instead of just the _id
});