Mongoose / MongoDB – 引用另一个没有ObjectId的模式

我目前有两个模式。

var carSchema = new mongoose.Schema({ id: { type: Number, unique: true, required: true }, make: { type: String, required: true }, model: { type: String, required: true }, year: { type: Number, required: true, min: config.MIN_YEAR, max: config.MAX_YEAR }, color: { type: String }, price: [ // don't know what to put here... ], }); var priceSchema = new mongoose.Schema({ car_id: { type: Number }, amount: { type: Number, min: 0 }, year: { type: Number, min: config.MIN_YEAR, max: config.MAX_YEAR } }); 

从上面的两个模式可以看出,我试图从汽车模式中引用价格模式。 我知道你可以通过引用ObjectId( _id )来实现,但我需要通过car_id引用价格模式。 原因是因为我正在读取已经定义表头的CSV文件中的所有数据。 mongoose有什么可能的方法来做这个参考吗?

       

网上收集的解决方案 "Mongoose / MongoDB – 引用另一个没有ObjectId的模式"

在汽车模式之上定义价格模式,然后将价格模式放到汽车模式中。

 ... color: { type: String }, price: [priceSchema] ... 

你可以这样做:

 var priceSchema = new mongoose.Schema({ car_id: { type: Number }, amount: { type: Number, min: 0 }, year: { type: Number, min: config.MIN_YEAR, max: config.MAX_YEAR } }); 

然后制作Price as的模型

 var Price = mongoose.model('Price', priceSchema); 

其次是:

 var carSchema = new mongoose.Schema({ id: { type: Number, unique: true, required: true }, make: { type: String, required: true }, model: { type: String, required: true }, year: { type: Number, required: true, min: config.MIN_YEAR, max: config.MAX_YEAR }, color: { type: String }, price: { type: mongoose.Schema.Types.ObjectId, ref: 'Price' }, }); 

然后使汽车模型为:

 var Car = mongoose.model('Car', carSchema); 

这将做的伎俩。 然后你可以运行你的查询:

 Car.find({_id: 1}) .populate('price') .exec(function(err, car) { // do stuff with your car objects });