Juan Gonzales
Juan Gonzales

Reputation: 117

Mongoose, how do I join to collections using populate?

First Schema:

const ProviderSchema =  new mongoose.Schema({
    provName    : { type: String, index: true }
});
module.exports = mongoose.model('provider', ProviderSchema);

Second Schema:

const WebProviderSchema =  new mongoose.Schema({
    userId      : { type: Schema.Types.ObjectId, ref: 'users'},
    providerId  : { type: Schema.Types.ObjectId, ref: 'providers'}
});
module.exports = mongoose.model('webProvider', WebProviderSchema);

How do I join these two schemas?

So far if I do the following, I only get data from the second schema:

webProvider
            .find({userId : '23423df234434bc956'})
            .populate("providers")
            .exec( function (error, listData) {
                  console.log(listData);
});

Upvotes: 0

Views: 366

Answers (1)

Shaishab Roy
Shaishab Roy

Reputation: 16805

To populate you should use local field providerId. Should be .populate("providerId") instead of .populate("providers").

webProvider.find({userId : '23423df234434bc956'})
           .populate("providerId")
           .exec( function (error, listData) {
               console.log(listData);
           });

To populate multiple field can use like :

.populate("providerId userId")

or

.populate("providerId")
.populate("userId")

Upvotes: 1

Related Questions