node.js - MongoDB:按四舍五入值分组
问题描述
让我们举个例子:
{ _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。它有效,但我有两个问题:
- 我想像我的例子(100、1000、10000)一样排序,我真的不知道我该怎么做
- 实际上它适用于 $concat。我必须写每一个案例,所以这似乎是错误的方式。经过一些研究,我发现 $round 可以取负数。
在我的情况下: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,
},
},
])
推荐阅读
- angular - 角路由不使用哈希不工作
- javascript - 以编程方式在 BPMN 通道上设置标签和 ID
- ionic4 - Ionic 4 加载拦截器无法解除加载
- ruby-on-rails - 如何使用 rbenv 安装旧版本的 Rails?为什么安装 5.2.3 版本后缺少 rails 命令?
- csv - 无法在 Pandas 中导入 Hive CSV
- sql - SQL 语句获取两天而不是午夜的每日总计
- javascript - 如何在仍然能够编辑的同时动态更新文本区域的值 - React
- python - 同时使用 GUI _and_ CLI 与我的应用程序交互
- django - 重置用户django rest auth的密码
- java - Android ListView.notifyDataSetChanged 导致不正确的行