0

Ceci est la partie pertinente de mon schéma:Est-il possible de remplir un champ dans mangouste qui a aussi d'autres informations à ce sujet?

var classroomSchema = mongoose.Schema({ 
    students: [{ 
     _id: mongoose.Schema.Types.ObjectId, 
     ref: 'User', 
     rate: { 
      type: Number, 
      default: 200, 
     }, 
     referrals: [mongoose.Schema.Types.ObjectId], 
    }], 
)}; 

taux Çà et références sont propriétés des étudiants qui sont valables dans le contexte de cette classe, et ne peuvent pas être remplis à partir du modèle des étudiants.

Est-il possible de définir mon schéma de façon à pouvoir conserver ces champs (taux et références) et aussi utiliser le remplissage pour lier d'autres champs tels que le nom, l'âge, etc. de l'étudiant?

+0

Jetez un oeil à '$ lookup' https://stackoverflow.com/questions/9621928/how-do-i -query-references-objects-in-mongodb/39476690 # 39476690 – sidgate

Répondre

1

Changer votre schéma à ceci:

var classroomSchema = mongoose.Schema({ 
    students: [{ 
     rate: { type: Number, default: 200 }, 

     user: { ref: 'User', type: Schema.Types.ObjectId }, 
     referrals: [mongoose.Schema.Types.ObjectId], 
    }], 
}); 

Utilisation:

classroom 
    .findOne(...) 
    .populate('user') 
    .exec((err, classroom) => { 
    let student0 = classroom.students[0]; 
    // student0.rate 
    // student0.user.name 
    }); 
+0

Y a-t-il un meilleur moyen? Sauvegarder un champ d'utilisateur dans le tableau des étudiants qui est supposé être un tableau d'utilisateurs ne me paraît pas naturel. – lightbringer

+0

Le champ 'user' est juste une référence à' User'. C'est la manière la plus naturelle si un utilisateur peut être ajouté dans plusieurs salles de classe. – Xiaoy312