2017-07-02 15 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 
}); 
相關問題