对mongodb的aggregate管道用法的理解

最近看了一些关于mongodb的教程,感觉很费力,尤其涉及到了一些复杂的操作。比如很多贴上了大段数据来描述样例、或者翻译了大段官方文档的文字,这些都让我感觉疲劳。 下面我用自己写的一些话来描述我对mongodb聚合的理解:

注: <>用来标识变量(即里面的内容可以替换成其他),可以按照<>里面的单词的含义来理解下面的代码。

例子:假设你有一组数据,需要按照顺序做这些操作:筛选、分组、求和,你可以用如下代码实现:

db.<collection_name>.aggregate([
{$match:key},
{$group:{_id:$<group_filed_name>, <dispaly_field_name>:{$first:<nonkey_name>}}},
{$group:{_id:null, <sum_name>:{$sum:$<sum_field_name>}}}
]).next().get('<sum_name>')
  • < key>表示用来筛选的关键字,它的里面结构形如

    {<key1_name>:<key1_value>, <key2_name>:<key2_value>, ...}
    
  • 表示用来给数据分组的字段名称,其中 _id 是一个内置的关键字,在_id所在字段的值用来划分分组。

  • 表示最后输出的字段的名称,表示某个非关键字字段的名称

  • 在第二步分组操作做完显示的数据结构是这样的

    {_id:<group_field1_value>,
    

    :}

    {_id:, :}

* 表示最后要显示的求和字段的名称,表示要求和的字段的名称,_id:null表示不分组,这里使用$group符号的原因是$sum必须在$group实现

  • 在求和之后数据的结构是这样的

    {_id:null,<sum_name>:<sum_value>}
    

从上面的例子,我们不难看出mongodb的聚合管道操作它允许分组、求和、筛选等等不同的操作依次进行,从代码里面使用了”[]“这个列表操作符,可以想像mongodb的聚合操作就像python的列表一样依次进行读取、操作,而且聚合操作允许重复多次进行的相同的操作。因此,我认为不管多复杂的操作只要分成一些基本操作,都可以用mongodb的聚合操作实现。