MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

mangusto:preencha o mangusto que não possui nenhum ObjectId


Você pode usar o conceito de Virtuals . Aqui como vai:

Modifique seu arquivo de esquema da seguinte maneira:
//---------------------------------------------------
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);
//-------------------------------------------------

No arquivo que você está tentando preencher, coloque isso na seção de declaração:
//-----------------------------------------------------
const Games = mongoose.model("Games", gameSchema);
//---------------------------------------------------

Por último, mas não menos importante, onde você deseja preencher:
//----------------------------------------------
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);
  });
//---------------------------------------------

Eu testei esta solução em um problema que fiz, apenas modifiquei para atender às suas necessidades, por favor, deixe-me saber se funciona no seu; se não, podemos descobrir juntos como ajustar minha solução para atender às suas necessidades.

Algumas referências iniciais
  1. Preencha um modelo mangusto com um campo que não seja um id