22 votes

La mangouste remplit le champ sans l'option ref

J'ai 3 schémas :

var User1Schema = new Schema({
    name: {type:String , trim: true, required: true },
    status: {type:Number, required: true, default:1}
},{collection:"user_1"});

,

var User2Schema = new Schema({
    name: {type:String , trim: true, required: true },
    email: {type: String, required: true, index: {unique: true} },
    status: {type:Number, required: true, default:1}
},{collection:"user_2"});

et

var ConversationSchema = new Schema( {

    participants: [{user:{type: ObjectId, required: true}],
    creator: {type: ObjectId, required: true},

    status: { type:Number, required: true, default:1 }

}, { collection:"conversation" } );

Dans ConversationSchema, j'ai un champ creator qui a maintenant l'option ref, car il peut être du type User1Schema ou User2Schema.

Comment remplir le champ créateur avec la mangouste ?

26voto

aaronheckmann Points 3875
Conversation.find().populate('creator', null, 'User2').exec(callback)

En documents ne sont pas claires. Mise à jour prochaine.

La syntaxe sera également plus simple dans la v3.6.

1voto

Faiz Ahmed Points 1

À partir du 27 mars 2019, la procédure à suivre est la suivante :

1) Définir le champ à remplir comme ObjectId sans fournir une réf.

var eventSchema = new Schema({
  name: String,
  // The id of the corresponding conversation
  // Notice there's no ref here!
  conversation: ObjectId
});

2) Lors de l'élaboration de la requête, transmettre le modèle du schéma en même temps que la requête :

Event.
  find().
  populate({ path: 'conversation', model: Conversation }).
  exec(function(error, docs) { /* ... */ });

REF : https://mongoosejs.com/docs/populate.html#cross-db-populate

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X