MongoDB $ группа и $ проект - PullRequest
1 голос
/ 05 мая 2020

Мне нужно найти имя, dob, адрес и номер лицензии водителей с одинаковым номером лицензии. Это код, который я использую:

db.employee.aggregate([
  {
    $group: {
      _id: {
        "license": "$EMPLOYEE.licence"
      },
      count: {
        $sum: 1
      }
    }
  },
  {
    $match: {
      count: {
        "$gt": 1
      }
    }
  },
  {
    $project: {
      "EMPLOYEE.name": 1,
      "EMPLOYEE.dob": 1,
      "EMPLOYEE.address": 1,
      "EMPLOYEE.licence": 1
    }
  }
])

Итак, он работает, но отображает только дублирующийся номер лицензии. Часть $ project не отображается. Что я сделал не так? Это образец данных, если вы хотите его протестировать:

db={
  "employee": [
    {
      "_id": "6",
      "EMPLOYEE": {
        "e#": "6",
        "name": "Michael Jones",
        "dob": "05-OCT-65",
        "address": "23 Waterloo Ave. Surry Hills, NSW 2502",
        "hiredate": "12-JAN-93",
        "position": "mechanic",
        "licence": "7773",
        "status": "ON_LEAVE",
        "experience": "STANDARD",
        "maintenances": [
          {
            "registration": "QRT834",
            "time": "40",
            "maintenance date": "12-JUN-99"
          },
          {
            "registration": "QRT834",
            "time": "40",
            "maintenance date": "15-JUN-98"
          },
          {
            "registration": "SYF777",
            "time": "30",
            "maintenance date": "01-AUG-98"
          }
        ]
      }
    },
    {
      "_id": "9",
      "EMPLOYEE": {
        "e#": "9",
        "name": "Alex Davis",
        "dob": "15-AUG-93",
        "address": "23 Waterloo Ave. Surry Hills, NSW 2502",
        "hiredate": "12-JAN-93",
        "position": "mechanic",
        "licence": "9385",
        "status": "ON_LEAVE",
        "experience": "STANDARD",
        "maintenances": [
          {
            "registration": "QRT834",
            "time": "40",
            "maintenance date": "30-JUN-02"
          }
        ]
      }
    },
    {
      "_id": "23",
      "EMPLOYEE": {
        "e#": "23",
        "name": "Rose Mathews",
        "dob": "20-NOV-80",
        "address": "23 Waterloo Ave. Surry Hills, NSW 2502",
        "hiredate": "12-JAN-93",
        "position": "mechanic",
        "licence": "7773",
        "status": "ON_LEAVE",
        "experience": "STANDARD",
        "maintenances": [
          {
            "registration": "QRT834",
            "time": "40",
            "maintenance date": "12-JUN-99"
          },
          {
            "registration": "LUCY01",
            "time": "200",
            "maintenance date": "12-MAR-97"
          },
          {
            "registration": "QRT834",
            "time": "40",
            "maintenance date": "30-JUN-02"
          }
        ]
      }
    }
  ]
}

Я запускал его на этом веб-сайте: https://mongoplayground.net

1 Ответ

0 голосов
/ 05 мая 2020

Вам также необходимо передать эти поля из этапа $group.

Я обновил запрос, посмотрите:

db.sample.aggregate([
  {
    $group:{
      "_id":"$EMPLOYEE.licence",
      "count":{
        $sum:1
      },
      "EMPLOYEE":{
        $addToSet:{
        "name":"$EMPLOYEE.name",
        "dob":"$EMPLOYEE.dob",
        "address":"$EMPLOYEE.address",
        "licence":"$EMPLOYEE.licence",
        }
      }
    }    
  },
  {
    $match:{
      count:{
        $gt:1
      }
    }
  },
  {
    $unwind:"$EMPLOYEE"
  },
  {
    $project:{
     "EMPLOYEE.name": 1,
     "EMPLOYEE.dob": 1,
     "EMPLOYEE.address": 1,
     "EMPLOYEE.licence": 1
    }
  }
]).pretty()

Вывод

{
        "_id" : "7773",
        "EMPLOYEE" : {
                "name" : "Michael Jones",
                "dob" : "05-OCT-65",
                "address" : "23 Waterloo Ave. Surry Hills, NSW 2502",
                "licence" : "7773"
        }
}
{
        "_id" : "7773",
        "EMPLOYEE" : {
                "name" : "Rose Mathews",
                "dob" : "20-NOV-80",
                "address" : "23 Waterloo Ave. Surry Hills, NSW 2502",
                "licence" : "7773"
        }
}

Надеюсь, это поможет :)

...