MongoDB, получая дату максимального значения, игнорирует один столбец - PullRequest
1 голос
/ 29 апреля 2020

У меня есть json и я использую совокупную трубопроводную линию, как показано ниже

db.chat_question_logs.aggregate([
  {
    $match: {
      createdDate: {
        $gte: ISODate("2020-04-22T00:00:00Z"),
        $lte: ISODate("2020-04-27T00:00:00Z"),
      },
    },
  },
  {
    $project: {
      _id: 0,
      "intentInfo.intentName": 1,
      dateField: {
        $dateToString: { format: "%Y-%m-%d", date: "$createdDate" },
      },
    },
  },
  {
    $group: {
      _id: {
        TransactionDate: "$dateField",
        IntentName: "$intentInfo.intentName",
      },
      count: { $sum: 1 },
    },
  },
]);

Некоторые выходные данные приведены ниже. Как у меня есть несколько IntentName с соответствующим количеством. Теперь я хочу получить дату, IntentName и подсчитать, где число макс. Как я могу снова использовать групповую функцию.

/* 1 */
({
  "_id": {
    "TransactionDate": "2020-04-24",
    "IntentName": "Bluetooth_Headset"
  },
  "count": 1
},
/* 2 */
{
  "_id": {
    "TransactionDate": "2020-04-23",
    "IntentName": "OK"
  },
  "count": 1
},
/* 3 */
{
  "_id": {
    "TransactionDate": "2020-04-22",
    "IntentName": "Spare_Part_Pricing"
  },
  "count": 7
},
/* 4 */
{
  "_id": {
    "TransactionDate": "2020-04-23",
    "IntentName": "Service Center Location"
  },
  "count": 2
},
/* 5 */
{
  "_id": {
    "TransactionDate": "2020-04-22",
    "IntentName": "Default Welcome Intent"
  },
  "count": 6
},
/* 6 */
{
  "_id": {
    "TransactionDate": "2020-04-22",
    "IntentName": "Talk_To_Agent"
  },
  "count": 5
},
/* 7 */
{
  "_id": {
    "TransactionDate": "2020-04-24",
    "IntentName": "Talk_To_Agent"
  },
  "count": 2
},
/* 8 */
{
  "_id": {
    "TransactionDate": "2020-04-24",
    "IntentName": "Product_Price"
  },
  "count": 2
},
/* 9 */
{
  "_id": {
    "TransactionDate": "2020-04-22",
    "IntentName": "Product_Price"
  },
  "count": 5
})

1 Ответ

1 голос
/ 29 апреля 2020

Добавьте этот этап после вышеуказанного $group

  {
    $group: {
      _id: "$_id.TransactionDate",
      data: {
        $max: {
          count: "$count",
          intentName: "$_id.IntentName"
        }
      }
    }
  }

MongoPlayground

...