आप Virtuals
. की अवधारणा का उपयोग कर सकते हैं . यहाँ यह कैसे जाता है:
अपनी स्कीमा फ़ाइल को निम्नानुसार संशोधित करें:
//---------------------------------------------------
const gameSchema = new mongoose.Schema({
title: String,
rating: { type: Number, min: 0, max: 100 },
genres: [Number],//here you have an array of id of type Number as yours, no ref
});
const GenreSchema = new mongoose.Schema({
id: { type: Number },
name: String,
description: String,
});
gameSchema.virtual("games", {
ref: "Genres",//this is the model to populate
localField: "id",//the field used to make the populate, it is the field that must match on the aimed Genres model <- here is the trick you want!!!
foreignField: "genres",//the field to populate on Games model
justOne: false,
});
gameSchema.set("toObject", { virtuals: true });//if you are planning to use say console.log
gameSchema.set("toJSON", { virtuals: true });//if you are planning to use say res.json
mongoose.model("Games", gameSchema);
mongoose.model("Genres", GenreSchema);
//-------------------------------------------------
जिस फ़ाइल को आप पॉप्युलेट करने का प्रयास कर रहे हैं, उसे डिक्लेरेशन सेक्शन में डालें:
//-----------------------------------------------------
const Games = mongoose.model("Games", gameSchema);
//---------------------------------------------------
अंतिम लेकिन कम से कम, जहाँ आप आबाद करना चाहते हैं:
//----------------------------------------------
Games.find({})
.populate("games")
.exec(function (error, games) {
//with games you can use things like game.field1, it is actually an JSON object! Print out games and see the fieds for your self, select one and call it using the dot notation!
console.log(games);
});
//---------------------------------------------
मैंने इस समाधान का परीक्षण एक समस्या पर किया है जो मैंने किया था, बस आपकी आवश्यकताओं के अनुरूप संशोधित किया गया है, कृपया मुझे बताएं कि क्या यह आप में काम करता है; यदि नहीं, तो हम एक साथ यह पता लगा सकते हैं कि आपकी आवश्यकताओं को पूरा करने के लिए मेरे समाधान को कैसे फिट किया जाए।
कुछ प्रारंभिक संदर्भ