MongoDB 具有唯一结果的聚合查找

MongoDB aggregation lookup with unique results

我有 3 个集合具有以下架构

当我执行以下查询时,我正在获取包含所有语音号码的合同详细信息。 我如何才能只选择不同的 voiceNumbers。 一天内尝试了多种方法,但没有达到所需的输出

db.getCollection("common").aggregate([
  {
    $match: {
      "name.firstName": "Kevin",
    },
  },
  {
    $lookup: {
      from: "user",
      localField: "_id",
      foreignField: "userId",
      as: "userDetails",
    },
  },
  {
    $unwind: {
      path: "$userDetails",
      includeArrayIndex: "0",
      preserveNullAndEmptyArrays: true,
    },
  },
  { $match: { "userDetails.userType": { $in: ["U"] } } },
  {
    $lookup: {
      from: "contract",
      localField: "userDetails.userNumber",
      foreignField: "userNumber",
      as: "contractDetails",
    },
  }
]);

以下是当前和预期结果

$unwind 下方添加 $group 在汇总的末尾

  {
    $unwind: "$contractDetails"
  },
  {
    $group: {
      "_id": "$contractDetails.voiceNumber",
      "field": {
        "$first": "$$ROOT"
      }
    }
  },
  {
    $group: {
      "_id": "$field._id",
      "userDetails": {
        "$first": "$field.userDetails"
      },
      "gender": {
        "$first": "$field.gender"
      },
      "name": {
        "$first": "$field.name"
      },
      "0": {
        "$first": "$field.0"
      },
      "contractDetails": {
        "$push": "$field.contractDetails"
      }
    }
  }

db.common.aggregate([
  {
    $match: {
      "name.firstName": "Kevin"
    }
  },
  {
    $lookup: {
      from: "user",
      localField: "_id",
      foreignField: "userId",
      as: "userDetails"
    }
  },
  {
    $unwind: {
      path: "$userDetails",
      includeArrayIndex: "0",
      preserveNullAndEmptyArrays: true
    }
  },
  {
    $match: {
      "userDetails.userType": {
        $in: [
          "U"
        ]
      }
    }
  },
  {
    $lookup: {
      from: "contract",
      localField: "userDetails.userNumber",
      foreignField: "userNumber",
      as: "contractDetails"
    }
  },
  {
    $unwind: "$contractDetails"
  },
  {
    $group: {
      "_id": "$contractDetails.voiceNumber",
      "field": {
        "$first": "$$ROOT"
      }
    }
  },
  {
    $group: {
      "_id": "$field._id",
      "userDetails": {
        "$first": "$field.userDetails"
      },
      "gender": {
        "$first": "$field.gender"
      },
      "name": {
        "$first": "$field.name"
      },
      "0": {
        "$first": "$field.0"
      },
      "contractDetails": {
        "$push": "$field.contractDetails"
      }
    }
  }
])

mongoplayground