【发布时间】:2021-11-20 20:44:05
【问题描述】:
我在MySQL中有这段代码,对应一个简单的汽车数据库
SELECT
"Cost" AS "Metric",
AVG(car_cost) As "Avg",
MIN(car_cost) As "Min",
MAX(car_cost) As "Max",
"Dollars" As "Unit"
from db.car_data
union SELECT
'Mileage',
AVG(car_mileage),
MIN(car_mileage),
MAX(car_mileage),
'Miles'
from db.car_data
返回这个表
| Metric | Avg | Min | Max |
|---|---|---|---|
| Cost | 2345 | 5674 | 53456 |
| Mileage | 49023 | 53 | 178003 |
但是,当在 MongoDB 等效项中重新创建它时,我遇到了一个问题
db.car_data.aggregate([
{"$group":
{
_id: null,
Avg: {
$avg: { "$car_cost" }
},
Min: {
$min: { "$car_cost" }
},
Max: {
$max: { "$car_cost" }
}
}
},
{"$group":
{
_id: null,
Avg: {
$avg: { car_mileage }
},
Min: {
$min: { car_mileage }
},
Max: {
$max: { car_mileage }
}
}
}
]);
实际输出
[
{
"_id": null,
"Avg": null,
"Min": null,
"Max": null
}
]
预期输出
[
{
"_id": null,
"Avg": 2345,
"Min": 5674,
"Max": 53456
},
{
"_id": null,
"Avg": 49023,
"Min": 53,
"Max": 178003
}
]
我做错了什么还是有更好的方法来通过 Mongo 中的聚合来做到这一点?他们各自在 Mongo 中独立工作...
【问题讨论】:
-
它们是 2 个同名的集合,但来自不同的数据库?在一个您使用 db 中,在另一个 dbName 中,如果它的 1 个集合来自同一个数据库,您可以使用 6 个累加器而不是 3 个,并通过项目更改结果。我们有
$facet和$unionWith,但似乎不需要任何这些。如果您真的需要 2 个文档,您可以将它们放入 1 个数组(6 个结果)中,其中包含 2 个成员并展开 -
@Takis_ 感谢您指出这个错字。他们应该是同一个数据库。我已经编辑了我的问题
标签: mongodb aggregation-framework aggregate-functions