Populate virtuel avec Mongoose
Aug 19 2020
J'ai le shema suivant, comment remplir le document de Media pour l'éducation, l'expérience et la certification? J'ai essayé de nombreuses façons mais cela ne fonctionne pas.
const mongoose = require('mongoose');
exports.User = schema => {
schema.add({
username: {
type: String,
index: true
},
education: [
{
title: String,
description: String,
year: String,
verified: Boolean,
documentId: mongoose.Schema.Types.ObjectId
}
],
experience: [
{
title: String,
description: String,
year: String,
verified: Boolean,
documentId: mongoose.Schema.Types.ObjectId
}
],
certification: [
{
title: String,
description: String,
year: String,
verified: Boolean,
documentId: mongoose.Schema.Types.ObjectId
}
]
});
schema.set('toObject', { virtuals: true });
schema.set('toJSON', { virtuals: true });
};
Réponses
AlpeshPatil Aug 26 2020 at 19:58
Vous pouvez utiliser l'attribut path pour les liens profonds, cela fonctionnerait également pour les types Array.
Étape 1: Modifiez le schéma du champ documentId comme ci-dessous pour définir une référence à la collection de médias
documentId: { type: mongoose.ObjectId, ref: 'Media' },
Étape 2: définir les propriétés virtuelles sur le schéma
schema.virtual('educationDocument', {
ref: 'Media', // the collection/model name
localField: 'education.documentId',
foreignField: '_id',
justOne: true, // default is false });
Étape 3: Utilisez le remplissage de mangouste avec la définition de chemin pour les liens profonds
const users = await User.find({})
.populate({ path: 'educationDocument' })
.populate({ path: 'experienceDocument' })
.populate({ path: 'certificationDocument' })
.execPopulate()
Tahero Aug 19 2020 at 10:49
vérifier peupler
const users = await User.find({}).populate('education').populate('experience').populate('certification')