Возьмем пример:
{ _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 проблемы:
В моем случае: 123 может быть 100 с $round(123, -2). Но как я могу динамически использовать свой отрицательный фактор?
Да, мне действительно нужна помощь.
С уважением,
Эта агрегация должна решить вашу проблему:
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,
},
},
])