$group按MongoDb AGGRAGTE中的每个唯一字符串

$group按MongoDb AGGRAGTE中的每个唯一字符串,mongodb,mongoose,aggregate,Mongodb,Mongoose,Aggregate,我有一堆MongoDB中的事件文档,我想通过createdAt对它们进行分组,并获得当天创建的事件的每个唯一标题的计数 事件文档如下所示: { "createdAt": 2020-02-03T00:00:00.000Z, "title": "Book meeting" } 到目前为止,我得到了输出: [{ "titles": [ "Book meeting", "Book meeting", "Person

我有一堆MongoDB中的事件文档,我想通过
createdAt
对它们进行分组,并获得当天创建的事件的每个唯一
标题的计数

事件文档如下所示:

{
   "createdAt": 2020-02-03T00:00:00.000Z,
   "title": "Book meeting"
}
到目前为止,我得到了输出:

[{
        "titles": [
          "Book meeting",
          "Book meeting",
          "Personal meeting",
          "Personal meeting",
          "Book meeting",
          "Book meeting",
          "Book meeting",
          "Book meeting",
          "Training",
          "Book meeting",
          "Book meeting",
          "Book meeting",
          "Book meeting",
          "Book meeting",
          "Book meeting",
          "Book meeting",
          "Digital meeting",
          "Support"
        ],
        "date": "2020-02-03T00:00:00.000Z"
}, ...events ],
但我希望它是:

{
        "Book meeting": 10,
        "Digital meeting": 7,
        ...for all titles
        "date": "2020-02-03T00:00:00.000Z"
},
以下是我目前正在做的事情:

    Events.aggregate().group({
        _id: {
          createdAt: "$createdAt",
          title: "$title"
        }
      })
      .group({
        _id: {
          year: { $year: "$_id.createdAt" },
          month: { $month: "$_id.createdAt" },
          day: { $dayOfMonth: "$_id.createdAt" }
        },
        titles: { $push: "$_id.title" }
      })
      .project({
        _id: 0,
        date: {
          $dateToString: {
            date: {
              $dateFromParts: {
                year: "$_id.year",
                month: "$_id.month",
                day: "$_id.day"
              }
            }
          }
        },
        titles: 1,
      })
试试这个:

Events.aggregate([
  {
    $group: {
      _id: {
        title: "$title",
        date: {
          $dateToString: {
            date: "$createdAt",
            format: "%Y-%m-%d"
          }
        }
      },
      count: {
        $sum: 1
      }
    }
  },
  {
    $group: {
      _id: "$_id.date",
      titles: {
        $push: {
          k: "$_id.title",
          v: "$count"
        }
      }
    }
  },
  {
    $addFields: {
      titles: {
        $mergeObjects: [
          {
            "date": {
              $concat: [
                "$_id",
                "T00:00:00.000Z"
              ]
            }
          },
          {
            $arrayToObject: "$titles"
          }
        ]
      }
    }
  },
  {
    $replaceWith: "$titles"
  }
]).exec();
试试这个:

Events.aggregate([
  {
    $group: {
      _id: {
        title: "$title",
        date: {
          $dateToString: {
            date: "$createdAt",
            format: "%Y-%m-%d"
          }
        }
      },
      count: {
        $sum: 1
      }
    }
  },
  {
    $group: {
      _id: "$_id.date",
      titles: {
        $push: {
          k: "$_id.title",
          v: "$count"
        }
      }
    }
  },
  {
    $addFields: {
      titles: {
        $mergeObjects: [
          {
            "date": {
              $concat: [
                "$_id",
                "T00:00:00.000Z"
              ]
            }
          },
          {
            $arrayToObject: "$titles"
          }
        ]
      }
    }
  },
  {
    $replaceWith: "$titles"
  }
]).exec();

您能将json格式的示例文档添加到问题中吗?它包括
createdAt
title
。就这样。你最好添加到问题中,它将帮助你获得答案。添加到问题中!createdAt字段是字符串还是ISODate?您可以将json格式的示例文档添加到问题中吗?它包括
createdAt
title
。就这样。你最好添加到问题中,它将帮助你获得答案。添加到问题中!createdAt字段是字符串还是ISODate?