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 个问题:
- 我想像我的例子一样排序 (100, 1000, 10000) 但我真的不知道我该怎么做
- 实际上它适用于 $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,
},
},
])
举个例子:
{ _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 个问题:
- 我想像我的例子一样排序 (100, 1000, 10000) 但我真的不知道我该怎么做
- 实际上它适用于 $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,
},
},
])