Мангуст .populate () не заполняет - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть две схемы Role и User.Когда я делаю Role.find(), я хочу заполнить users пользователями, которые имеют эту конкретную роль.

let roleSchema = new Schema({
  name: {
    type: String,
    required: true,
  },
  ...,
  users: [{
    type: mongoose.Schema.ObjectId,
    ref: 'User'
  }]
}, {
  timestamps: true,
});

const Role = mongoose.model('Role', roleSchema);
let userSchema = new Schema({
  username: {
    type: String,
    required: true,
  },
  ...,
  role: {
    type: mongoose.Schema.ObjectId,
    ref: 'Role'
  },
}, {
    timestamps: true,
  }
);

const User = mongoose.model('User', userSchema);

Когда я получаю Role со следующим кодом:

Role.findById(req.params.roleId)
  .populate('users')
  .then(role => {
    res.send(role);
  }).catch(err => {
    res.send(err)
});

Возвращает следующее:

{  
   "users": [  

   ],
   "_id":"5c78006df35ca926534ad865",
   "name":"Role",
   "createdAt":"2019-02-28T15:38:21.741Z",
   "updatedAt":"2019-02-28T15:38:21.741Z",
   "__v":0
}

User.find().populate('role') отлично работает, но Role.find().populate('users') нет.

Я что-то делаю не так или нет?t Мне нужно .populate() в этом случае?

1 Ответ

0 голосов
/ 28 февраля 2019

Nevermind.Я думаю, что я должен был использовать aggregate().lookup() для этого все время ... так как не было никаких идентификаторов в Role.users ...

Role.aggregate()
  .lookup({
    from: 'users',
    localField: '_id',
    foreignField: 'role',
    as: 'users'
  }).then( role => {
    res.send(role);
  });

Это дало мне ответ, который я хотел.

...