首页 > 解决方案 > 是否可以有条件地链接 populate() 方法调用?

问题描述

我正在为我的应用程序创建一个数据库服务,但为一些代码。有很多人口。那么是否可以添加如下内容:

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'),

标签: javascriptmongoosemongoose-populate

解决方案


构建一系列要填充的东西。您可以动态构建此数组,然后将其传递给 Mongoose:

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(...)

推荐阅读