【问题标题】:MongoDB : Group by rounded valueMongoDB:按四舍五入值分组
【发布时间】:2021-03-25 13:34:11
【问题描述】:

举个例子:

{ _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 可能是 100 与 $round(123, -2)。 但是我怎样才能动态地拥有我的负面因素呢?

是的,我真的需要帮助。

感谢和问候,

【问题讨论】:

    标签: node.js mongodb aggregation-framework projection


    【解决方案1】:

    这个聚合应该可以解决你的问题:

    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,
        },
      },
    ])
    

    【讨论】:

      猜你喜欢
      • 2016-04-13
      • 1970-01-01
      • 2015-01-18
      • 1970-01-01
      • 2023-01-12
      • 2012-08-04
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多