xxZeus

Populate example

Apr 12th, 2020
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var mongoose = require('mongoose');
  2. var mongoosePaginate = require('mongoose-paginate-v2');
  3.  
  4. mongoose.connect('mongodb+srv://...', { useNewUrlParser: true }); //INSERT YOUR CONNECTION URL HERE
  5.  
  6.  
  7. var genreSchema = new mongoose.Schema({
  8.     name: String
  9. });
  10.  
  11. var gameSchema = new mongoose.Schema({
  12.     name: String,
  13.     genres: [{ genre: { type: mongoose.Types.ObjectId, ref: 'Genre' } }]
  14. });
  15.  
  16. gameSchema.plugin(mongoosePaginate);
  17.  
  18. const Genre = mongoose.model('Genre', genreSchema);
  19. const Game = mongoose.model('Game', gameSchema);
  20.  
  21. var gList = [
  22.     'Action',
  23.     'Horror',
  24.     'Drama',
  25.     'VR',
  26.     'FPS'
  27. ];
  28. //inserting genre:
  29. Genre.insertMany(
  30.     gList.map(e => {
  31.         return {
  32.             name: e
  33.         }
  34.     })
  35. ).then(doc => {
  36.     console.log("inserted", doc)
  37.     //looping through genre and adding a game which belong to each genre
  38.     // converting doc array to desired format as specifeid in schema [{ genre: { type: mongoose.Types.ObjectId, ref: 'Genre' } }]
  39.     var genArray = doc.map(gen => {
  40.         return { genre: gen._id };
  41.     }); //need _id field for population  to be done    
  42.     var AllGenreGame = new Game({ name: "All Genre Game", genres: genArray });
  43.     AllGenreGame.save().then(async (sG) => {
  44.         console.log("game saved", sG);
  45.         // game saved now  we can query it:
  46.         var result = await Game.paginate({}, {
  47.             page: 1,
  48.             limit: 10,
  49.             populate: 'genres.genre'
  50.         });
  51.         console.log("RESULT IS", result);
  52.         console.log("populated array", result.docs[result.docs.length - 1].genres);
  53.     })
  54. })
Add Comment
Please, Sign In to add comment