sql >> Database >  >> NoSQL >> MongoDB

mangoest:vul in in mangoest die geen ObjectId heeft

U kunt het concept van Virtuals . gebruiken . Hier hoe het gaat:

Wijzig uw schemabestand als volgt:

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

Op het bestand dat u probeert in te vullen, plaatst u dit in het declaratiegedeelte:

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

Last but not least, waar u wilt invullen:

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

Ik heb deze oplossing getest op een probleem dat ik had gedaan, zojuist aangepast om aan uw behoeften te voldoen, laat het me weten als het in de uwe werkt; zo niet, dan kunnen we samen uitzoeken hoe we mijn oplossing kunnen aanpassen aan uw behoeften.

Enkele eerste referenties

  1. Vul een mangoestmodel met een veld dat geen id is



  1. Het vinden van onderscheiden van collecties in Mongodb

  2. On-the-fly nieuwe Meteor-collecties maken

  3. Faye of Redis Pubsub

  4. mongoDB:$inc van een niet-bestaand document in een array