• Geek_862694
    2019-12-10
    这一节跟着唐老师学会了删库跑路.删库是掌握了,跑路还不是很熟悉具体流程,懂流程的可以指点一下
    
     7
  • 长期规划
    2019-12-02
    老师,看3.6的官方文档,删除是用deleteOne, deleteMany,这跟remove有什么区分吗

    作者回复: remove是mongo shell下的命令。deleteOne deleteMany是程序语言下的API。做的是类似的事情。

    
     2
  • 旺旺
    2019-11-13
    这个MongoDB删除collection的时候,占用的存储空间也是立即就释放了的吗?
     8
     2
  • 旺旺
    2019-11-20
    投影(projection)里面是不是可以对某个属性的表示形式做变换呢?比如将一个整数属性(保存的为1970年1月1日开始的毫秒数)转为日期格式表示?

    作者回复: 数据格式转换是4.0才开始支持的功能,本质上所有的转换都可以用`$convert`完成,但是转换为不同的数据类型时又有不同的简化版本。例如`$toInt`,`$toBool`,`$toDate`等。以下以使用最`$toDate`为例举例说明使用方式:

    ```javascript
    // 测试数据
    db.convertTest.insertMany([{
        date: new Date().getTime()
    }, {
        date: new Date().getTime() - 3600000
    }, {
        date: new Date().getTime() - 7200000
    }]);
    ```
    在`$project`中直接使用`$toDate`即可将epoch时间转换为日期类型:

    ```javascript
    db.convertTest.aggregate([{
        $project: {
            date: {
                $toDate: "$date"
            }
        }
    }]);
    ```

    参考:

    - `$convert`: https://docs.mongodb.com/manual/reference/operator/aggregation/convert/
    - `$toInt`: https://docs.mongodb.com/manual/reference/operator/aggregation/toInt/
    - `$toBool`: https://docs.mongodb.com/manual/reference/operator/aggregation/toBool/
    - `$toDate`: https://docs.mongodb.com/manual/reference/operator/aggregation/toDate/

     1
     1
  • Geek_6297e5
    2019-12-31
    请问,elematch和分开写有什么区别?

    作者回复: $elemMatch表示一个数组元素同时满足两个条件
    分开写表示一个元素满足一个条件,另一个元素满足另一个条件也算数
    举例来说:
    db.test.insert({array: [{a: 1, b: 1}, {a: 2, b: 2}]})
    db.test.find({"array.a": 1, "array.b": 2}); // 有结果,因为一个元素满足了a=1,另一个元素满足了b=2
    db.test.find({array: {$elemMatch: {a: 1, b: 2}}}); // 没有结果,因为没有一个元素同时满足a=1并且b=2

    
    
  • firek
    2019-12-22
    老师,mongodb删除了数据、表、数据库是没法恢复的么,有没有类似mysql有个日志记录的机制去回滚的?

    作者回复: mongodb有类似的oplog。但是那个要求你对全量的oplog都要保存,才能够从oplog里完全恢复被误删的表。

    
    
  • Keep
    2019-12-16
    老师请问一下:mongodb在查询的时候什么情况下会使用到索引?整体查询性能怎么样?
    
    
  • 丁丁历险记
    2019-12-10
    终于学会了跑路大法。
    
    
  • 于先生
    2019-12-07
    唐老师您好,我在使用Robo 3T这个工具的过程中,对集合右键执行了 Drup Collection,执行之后,show collections 已经看不到那个集合,但是此前占用的存储空间没有变化。 请问下这个集合是否还存在? 如果存在是否可以恢复? 如果不存在,如何释放存储空间?

    作者回复: 在使用MMAP引擎的时候删除集合不会回收存储空间。在WiredTiger引擎是直接回收存储空间的。 你可以在shell下面再尝试下这个操作看看是否robo 3t相关。

    
    
  • ★遠飛★
    2019-12-02
    最近遇到一个怪事,请教一下老师。最近我在六台主机上部署了一备二,三个分片的mongo分布式,开启了认证机制!在内网中完成了部署并能正常使用,但是当把内网网线拔掉,接上生产网络后,访问mongo却出现了认证失败错误!?为什么?全部重新启动mongo可恢复。另外分布式环境中,mongo如何做开机自启?

    作者回复: 关于1)比较难以判断实际情况。
    2)

    首先要把mongodb安装成service,参考Redhat的安装:

    https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/

    然后用chkconfig命令启用开机自启动,这里有教程:

    https://blog.csdn.net/u013554213/article/details/78792686

    分布式环境下也是一样。如果你是说希望有那种中央化的管控,那你可以使用OpsManager,可以通过GUI对全部节点进行起停控制,并且是会在服务器宕机时候自动重启服务。

    
    
  • walker
    2019-11-23
    老师能详细介绍一下 MongoDB 4.2 的新特性通配符索引(Wildcard Indexes)吗?

    作者回复: 简单来说,wildcard index对于下面这样的结构:

    {
     "_id" : 1,
     "data" : {
      "a" : 1728,
      "b" : 6740,
      "c" : 6481,
      "d" : 2066,
      "e" : 3173
     }
    }

    可以一条命令(一个索引)同时对a/b/c/d/e 5个字段做索引

    db.wildcardIndex.createIndex({"data.$**":1});

    甚至你将来在这个子文档里增加新的字段,也会自动索引。这样省去你单独创建很多个索引。

    但是。。。性能上有人测试过,这种比单独建每个索引还是要更加耗资源,差不多是两倍。 所以方便的代价是资源的更多消耗

     1
    
  • 旺旺
    2019-11-21
    对于传统SQL语句中类似update user set a=b 这种语句,在v4.2.1支持如下的写法:db.members.updateMany({},[{$set: {misc1: "$misc2"}}])来将一个属性中的值设到另一个属性中,在v4.0版本中则不支持。
    
    
  • 月迷津渡
    2019-11-21
    老师有个疑问说是MongoDB用的是B树来构建索引,那就像问下类似lt gt这种操作是基于B树的类似前中后序遍历来做范围查询么。

    作者回复: 没错,lt/gt用到索引的话就是在B树的叶子层进行遍历

    
    
  • 旺旺
    2019-11-20
    db.fruit.find( { "from" : {country: "China"} } ),这个到底是在查什么呢?查一个json对象字段from的值是“{country: "China"}”吗?好像不是这样的。

    作者回复: 这个表示查找一个JSON文档,这个文档有一个字段叫做 from, 并且 from字段的内容就是 {country: "China"} ,不多也不少。

     1
    
  • 肖大保健
    2019-11-18
    > db.orders.find({"orderLines":{$elemMatch:{"sku":"1400","qty":62}}},{"_id":0,"orderLines.sku":1,"orderLines.qty":1})
    { "orderLines" : [ { "sku" : "9569", "qty" : 75 }, { "sku" : "1400", "qty" : 62 }, { "sku" : "6156", "qty" : 43 }, { "sku" : "5983", "qty" : 36 }, { "sku" : "9183", "qty" : 34 }, { "sku" : "1145", "qty" : 93 }, { "sku" : "2056", "qty" : 19 }, { "sku" : "8706", "qty" : 1 }, { "sku" : "6951", "qty" : 10 }, { "sku" : "5129", "qty" : 58 }, { "sku" : "2069", "qty" : 96 } ] }
    >
    >
    是我语法有问题吗,用orders库,后面带了条件以后查询到的结果不匹配呢
    展开

    作者回复: 你是不是要这个:

    db.orders.find({
     "orderLines": {
      $elemMatch: {
       "sku": "1400",
       "qty": 62
      }
     }
    }, {
     "_id": 0,
     "orderLines.$": 1
    })

    
    
  • jeffery
    2019-11-16
    mongo后天怎么启动

    作者回复: 请把问题描述清楚。

     1
    
我们在线,来聊聊吧