【问题标题】:$lookup : return model if reference field is not empty$lookup : 如果参考字段不为空,则返回模型
【发布时间】:2021-10-22 02:51:13
【问题描述】:

我有College 模型,它有ref :"University"。每个学院在创建时都有 1 所大学。

所以我正在尝试获取大学的uuid 与请求查询匹配的所有大学。

所以我尝试了以下方法:

  const myAggregate = College.aggregate([
    {
      $match: {
        language: req.query.language,
        display_language: req.query.display_language
      }
    },
    {
      $lookup: {
        from: 'unis', // UNIVERSITY COLLECTION
        pipeline: [
          {
            $match: {
              $expr: {
                $eq: ["$uuid", req.query.id]
              }
            }
          }
        ],
        as: 'univ',
      },
    },
    {
      $sort: { createdAt: -1 },
    },
  ])

所以上面的代码在提供查询并且它不等于大学 UUID 时,它会获取所有大学,但 univ 数组中每个大学都是空的。

是否可以仅在 uuid 等于查询 id 时显示大学而不显示 univ 的空数组?

【问题讨论】:

    标签: mongodb mongoose mongoose-schema mongoose-populate


    【解决方案1】:

    你可以做 unwind 来移除空的。

    文档参考:https://docs.mongodb.com/manual/reference/operator/aggregation/unwind/

     const myAggregate = College.aggregate([
        {
          $match: {
            language: req.query.language,
            display_language: req.query.display_language
          }
        },
        {
          $lookup: {
            from: 'unis', // UNIVERSITY COLLECTION
            pipeline: [
              {
                $match: {
                  $expr: {
                    $eq: ["$uuid", req.query.id]
                  }
                }
              }
            ],
            as: 'univ',
          },
        },
       {"$unwind":{
     path: '$univ',
    preserveNullAndEmptyArrays: false}},
        {
          $sort: { createdAt: -1 },
        },
      ])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-09
      • 1970-01-01
      • 2020-06-11
      相关资源
      最近更新 更多