sql >> Databáze >  >> NoSQL >> MongoDB

mongoose:naplní se v mongoose, který nemá žádné ObjectId

Můžete použít koncept Virtuals . Tady, jak to jde:

Upravte soubor schématu následovně:

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

Na soubor, který se pokoušíte naplnit, vložte toto do sekce deklarace:

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

V neposlední řadě, kde chcete sídlit:

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

Testoval jsem toto řešení na problému, který jsem udělal, jen jsem ho upravil tak, aby vyhovoval vašim potřebám, dejte mi prosím vědět, jestli funguje ve vašem; pokud ne, můžeme společně přijít na to, jak přizpůsobit mé řešení vašim potřebám.

Některé počáteční reference

  1. Vyplňte model mongoose polem, které není ID



  1. Map-Reduce pro spojení dat (MongoDb)

  2. Seřadit podpole s neznámým rodičem

  3. Mongoose seřadí agregovaný výsledek

  4. Odlišná hodnota počtu MongoDB?