Можно ли связать вызовы методов populate () условно? - PullRequest
0 голосов
/ 23 марта 2020

Я создаю службу базы данных для своего приложения, но для некоторого кода. Здесь много населения. Так что можно добавить что-то вроде:

if (populateFriends) {
  .populate('friends')
}
if (populatePosts) {
  .populate('posts')
}

И добавить конец, автоматически добавив его в find (). Populate ('friends'). Populate ('posts');

Потому что теперь у меня есть что-то вроде этого:

  Action.find({ completed: false, userRole: ROLES.ADMIN }, selection)
    .populate({
      path: 'tender',
      select: 'number description shipper carriers type',
      populate: {
        path: 'shipper',
        select: 'company firstName lastName',
        populate: {
          path: 'company',
          select: 'companyName'
        }
      }
    })
    .sort({ creationDate: -1 })
    .populate('additionalData.documentId'),

1 Ответ

0 голосов
/ 23 марта 2020

Создайте массив вещей для заполнения. Вы можете построить этот массив динамически, а затем передать его в Mon goose:

let toPopulate = [];

if (populateTenders) {
    toPopulate.push({
        path: 'tender',
        select: 'number description shipper carriers type',
        model: Tender
    });
}
if (populateShippers) {
    toPopulate.push({
        path: 'shipper',
        select: 'company firstName lastName',
        model : Shipper 
    })
}

myModel.find({})
    .populate(toPopulate) // Now you populate both Tenders and Shippers, conditionally
    .exec(...)
...