• 蒋腾飞同学
    2019-11-13
    感觉python和mongodb很像,语法简洁~没有规则就是最好的规则?
    
     2
  • 旺旺
    2019-11-13
    MongoDB的聚合功能真强大啊,真的是不知道。
    不过想请教老师,MongoDB的这种聚合功能,对数据量很大的时候,性能会不会很差,仍然有很好的性能表现吗?毕竟是json格式的,在聚合的时候,效率会不会很差啊
     3
     2
  • fedwing
    2019-11-14
    请教下老师,后续会讲到mongo的同步,异步流程吗?还有是不是可以结合CURD或者其它指令来结合下源码介绍下mongo的工作流程!直接看源码,目前有点吃力,看的时候很多也不是很了解,或者老师有没有其它的资料可以帮助理解源码的!
    感谢😊
     1
     1
  • Jawohl
    2019-11-13
    及时雨,Mongo聚合操作对我的网关流量统计需求的实现大有裨益。
     1
     1
  • daming
    2020-01-20
    请问mongo查询用explain分析查询语句,winningPlan选中的索引并非最优索引,用hint强制执行winningplan,执行是分钟以上,然后选择自己认为最有的索引执行,只需要几十秒。然而不用hint,直接执行也是几十秒,说明explain没有显示真正最优索引,请问这是什么情况?

    作者回复: queryPlanner并不能保证100%找到最优的索引,所以才在必要的时候使用hint来强制指定。当你自己选了合适的索引执行以后,这个计划就会被cache,所以下次不用hint,可能也就是用了你这个cached的(最佳)索引。

    这个是我的一个推断。你可以清除下query plan cache再重新跑一下,看看是否还是能默认用到最佳索引。

    
    
  • YoKate
    2019-12-19
    这个:

    db.user.aggregate([
    {
      $match:{gender: '女'}
    } , {
      $group: {
       _id:"$DEPARTMENT',
       emp_qty:{$sum:1}
    }, {
     $match: {
      emp_qty: {$lte: 10}
    }
    }])

    是不是寻找部门女员工数量少于 10 的部门?
    展开

    作者回复: 对的。 $lte: 小于等于。所以是女员工数量等于或少于10的部门

    
    
  • cording
    2019-12-17
    老师,请教一下如果单表数据量有3亿,进行聚合统计比如count,效率怎么样?

    作者回复: 如果是无条件全表count,这个很快因为是实时计数的。

    带条件count取决于:1) 是否用到索引 2)你的数据是否都在内存 3)你的存储IO是否够快 - SSD vs SAS vs SATA 有很大差别

    通常来说这种操作会需要几十秒到分钟级如果没有优化。

    
    
  • 小氘
    2019-12-14
    管道和步骤让我想到了java中的Stream类,有中间操作和终端操作,Stream类就是想在java中实现数据库的聚合操作。
    
    
  • 丁丁历险记
    2019-12-11
    好奇一件事情,单表查询的话,为啥不直接支持下sql

    作者回复: MongoDB企业版中有支持SQL方式查询的工具。

    
    
  • 长期规划
    2019-12-03
    聚合功能很强大,可以用Pipeline实现很复杂功能,比SQL厉害
    
    
  • cliff
    2019-11-27
    老大有没有类似sumif的聚合

    作者回复: 没有sumif这个keyword,但是可以实现类似的事情,下面这个例子是只把>=10 的$a字段的值相加求和:

    db.collection.aggregate([{
      $group: {
        _id: null,
        total: {
          $sum: {
            $cond: [{ $gte: ["$a", 10] },
              "$a",
              0
            ]
          }
        }
      }
    }])

     3
    
  • 袭
    2019-11-27
    老师能不能再讲讲第二个例子两个match的区别?另外emp_qty的sum设为1,是说要做sum操作,还是每次增加1?如果设为2那统计出来的是人数的两倍吗?

    作者回复: 第一个match是过滤原始集合的数据。第二个是针对group之后的结果再次过滤掉员工数量大于等于10的,只保留小于10个员工的部门。 第二个match没法放到前面,因为emp_qty在原始集合里不存在,必须等group之后才可以。


    emp_qty: {$sum: 1}的意思是对group里面的每一条数据,值加1。 如果加2,自然结果就是两倍

     1
    
  • 袭
    2019-11-27
    为什么在project里面,first_name前要加美元符号,在一般find里面不需要加?

    作者回复: first_name要加美元符号,可以理解那是个变量, 实际的值要通过替换 first_name在文档中的具体值。

    find()操作里面的用到的first_name只是个key。

     1
    
  • 石头
    2019-11-15
    比sql语句复杂
    
    
我们在线,来聊聊吧