SELECT avg(rate)FROM MonghereDB中的WHERE sid = 1

时间:2018-05-04 14:39:07

标签: mongodb mongodb-query

如何在MongoDB中实现此SQL命令的等效命令?

SELECT avg(rate) FROM ratings WHERE sid=1

无需分组。

2 个答案:

答案 0 :(得分:0)

是的,在mongodb中有aggregation框架,您可以在其中创建想要查询的阶段的管道。

db.collection.aggregate([

    {
        $match: {
            "sid": 1
        }
    },
    {
        $project: avg(rate): {
            $avg: "$rate"
        }
    }

])

正如您在sql中所了解的那样,where首先应用了部分,这就是为什么我们首先放置$match管道的原因。 mongodb中的$match在某种程度上等同于where i SQL,mongodb中的$avgAVG中的SQL相同

答案 1 :(得分:-1)

要解决此问题,请在$avg聚合管道元素中使用$group。基本管道流程:

  • 匹配sid=1(您的WHERE子句)
  • sid分组(此时只有一个sid要分组,因为其他sid通过匹配过滤掉),并在群组内容中生成平均值

您的管道看起来像:

db.rates.aggregate(
 [
   { $match: {"sid":1}}, 
   { $group: { _id: "$sid", rateAvg: {$avg:  "$rate" } }}
 ])