MongoDB : 按舍入值分组

MongoDB : Group by rounded value

举个例子:

{ _id: "xx", total: 12345, name: "Bob" }
{ _id: "xa", total: 123, name: "Bob" }
{ _id: "xb", total: 1290, name: "Bob" }
{ _id: "xc", total: 1255, name: "Bob" }

我想要类似的东西:

[
  { name: '100', count: 1 },
  { name: '1000', count: 2 },
  { name: '10000', count: 1 }
]

实际上我使用 $project、$concat 和 $group。 它有效,但我有 2 个问题:

  1. 我想像我的例子一样排序 (100, 1000, 10000) 但我真的不知道我该怎么做
  2. 实际上它适用于 $concat。我必须写每个案例,所以这似乎是错误的方式。经过一些研究,我发现 $round 可以取负数。

在我的例子中:123 可以是 $round(123, -2) 的 100。 但是我怎样才能动态地拥有我的负面因素呢?

是的,我真的需要帮助。

感谢和问候,

此汇总应该可以解决您的问题:

db.collection.aggregate([
  {
    $addFields: {
      place: {
        $multiply: [
          {
            $add: [
              {
                $strLenCP: {
                  $toString: "$total",
                },
              },
              -1,
            ],
          },
          -1,
        ],
      },
    },
  },
  {
    $project: {
      name: {
        $round: ["$total", "$place"],
      },
    },
  },
  {
    $group: {
      _id: "$name",
      count: {
        $sum: 1,
      },
    },
  },
  {
    $project: {
      name: {
        $toString: "$_id",
      },
      count: 1,
      _id: 0,
    },
  },
  {
    $sort: {
      name: 1,
    },
  },
])