2017-07-02 35 views
2

我目前有两个模式。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文件中的所有数据。猫鼬是否有任何可能的方法来做这个参考?

+1

为什么不同时保留'car_id'和'_id'(新创建)?因为使用其他ID,您无法从“填充”中获益。 –

+0

@TalhaAwan我如何构建我的模式,使我能够同时使用'car_id'和'_id'来引用价格模式?这是我没有得到的 – calviners

+1

当您从CSV文件导入记录并创建价格对象时,您将同时拥有'car_id'和'_id'(默认情况下会输入这个猫鼬)。在汽车中输入价格参考数组中的_id。 –

回答

0

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

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

你可以这样做:

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 
    } 
}); 

然后做出价格模型作为

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 
});