sql >> Databasteknik >  >> NoSQL >> MongoDB

mongoose:befolka i mongoose som inte har något ObjectId

Du kan använda konceptet Virtuals . Så här går det till:

Ändra din schemafil enligt följande:

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

På filen du försöker fylla i, lägg detta i deklarationssektionen:

//-----------------------------------------------------
const Games = mongoose.model("Games", gameSchema);
//---------------------------------------------------

Sist men inte minst, var du vill befolka:

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

Jag har testat den här lösningen på ett problem jag hade gjort, just modifierat för att passa dina behov, snälla, låt mig veta om det fungerar i ditt; Om inte, kan vi tillsammans komma på hur vi ska anpassa min lösning för att möta dina behov.

Några initiala referenser

  1. Befolka en mangustmodell med ett fält som inte är ett id



  1. Ta bort objekt från en mängd dokument i Spring+Mongo

  2. Redis-gränsen för anslutning/buffertstorlek har överskridits

  3. Hur kan jag sortera efter $elemMatch i MongoDB?

  4. Infoga MongoDB-dokument med React.js