如何在MongoDB中实现此SQL命令的等效命令?
SELECT avg(rate) FROM ratings WHERE sid=1
无需分组。
答案 0 :(得分:0)
是的,在mongodb中有aggregation
框架,您可以在其中创建想要查询的阶段的管道。
db.collection.aggregate([
{
$match: {
"sid": 1
}
},
{
$project: avg(rate): {
$avg: "$rate"
}
}
])
正如您在sql
中所了解的那样,where
首先应用了部分,这就是为什么我们首先放置$match
管道的原因。 mongodb中的$match
在某种程度上等同于where
i SQL,mongodb中的$avg
与AVG
中的SQL
相同
答案 1 :(得分:-1)
要解决此问题,请在$avg
聚合管道元素中使用$group
。基本管道流程:
sid=1
(您的WHERE
子句)sid
分组(此时只有一个sid要分组,因为其他sid通过匹配过滤掉),并在群组内容中生成平均值您的管道看起来像:
db.rates.aggregate(
[
{ $match: {"sid":1}},
{ $group: { _id: "$sid", rateAvg: {$avg: "$rate" } }}
])