• MongoDB的安装和使用


    这里介绍MongoDB的安装和使用方法,包括安装Mongo、使用Shell命令操作MongoDB以及Java API编程实例等。

    安装MongoDB

    ​ 首先,在Linux系统中打开一个终端,执行如下命令导入公共秘钥到包管理器中:

    $ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5

    ​ 然后,创建MongoDB的文件列表,命令如下:

    $ echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb.list

    ​ 执行如下命令来更新包管理器:

    $ sudo apt-get update

    ​ 最后,执行如下命令安装MongoDB:

    $ sudo apt-get install -y mongodb-org

    ​ 安装完成后,在终端输入以下命令查看MongoDB版本:

    $ mongo -version

    ​ 安装成功以后,启动MongoDB的命令如下:

    $ systemctl daemon-reload
    $ systemctl start mongod

    ​ 默认设置下,MongoDB是随Ubuntu启动而自动启动的。可以输入以下命令查看是否启动成功:

    $ pgrep mongo -l #注意:-l是英文字母l,不是阿拉伯数字1

    ​ 使用MongoDB结束后,关闭MongoDB的命令如下:

    $ sudo service mongodb stop
    

     启动MongoDB命名:

    $ sudo service mongodb start
    

    MongoDB练习

     1,输入如下命令进入MongoDB Shell模式:

    $ mongo

    ​ 进入MongoDB Shell模式以后,默认连接的数据库是test数据库,可以在命令提示符“>”后面输入各种Shell命令来操作MongoDB数据库。

    清空上面的school数据库

    use school;

    db.dropDatabase();,

     2,建立数据库

    use school;
    
    show tables; 

     3,创建一年级的3个班,并随机添加 10 名学生

     for(grade_index in (grade = ['grade_1_1', 'grade_1_2', 'grade_1_3'])) {
    
           hobbys=['draw', 'dance', 'running', 'sing', 'football', 'basketball', 'computer', 'python']   
    
           for (var i = 1; i <= 10; i++) {
    
               db[grade[grade_index]].insert({
    
                   "name": "zhangsan" + i,
    
                   "sex": Math.round(Math.random() * 10) % 2,
    
                   "age": Math.round(Math.random() * 6) + 3,
    
                   "hobby": [hobbys[Math.round(Math.random() * 6)]]
    
               });
    
           }
    
       }
    

      4,查看

    查看一年级二班grade_1_2中的所有学生

    db.getCollection('grade_1_2').find({})

    查看一年级二班grade_1_2中所有年龄是 4 岁的学生

    db.getCollection('grade_1_2').find({"age": 4})

    查看一年级二班grade_1_2中所有年龄大于 4 岁的学生

    db.getCollection('grade_1_2').find({"age": {$gt: 4}})

    查看一年级二班grade_1_2中所有年龄大于 4 岁并且小于 7 岁的学生

    db.getCollection('grade_1_2').find({"age": {$gt: 4, $lt: 7}})

    查看一年级二班grade_1_2中所有年龄大于 4 岁并且性别值为0的学生

    db.getCollection('grade_1_2').find({"age": {$gt: 4}, "sex": 0})

    查看一年级二班grade_1_2中所有年龄小于 4 岁或者大于 7 岁的学生

    db.getCollection('grade_1_2').find({$or: [{"age": {$lt: 4}}, {"age": {$gt: 6}}]})

    查看一年级二班grade_1_2中所有年龄是 4 岁或 6 岁的学生

    db.getCollection('grade_1_2').find({"age": {$in: [4, 6]}})

    查看一年级二班grade_1_2中所有姓名带zhangsan1的学生

    db.getCollection('grade_1_2').find({"name": {$regex: "zhangsan1"}})

    查看一年级二班grade_1_2中所有姓名带zhangsan1和zhangsan2的学生

    db.getCollection('grade_1_2').find({"name": {
    
       $in: [new RegExp("zhangsan1"), new RegExp("zhangsan2")]
    
    }})

    查看一年级二班grade_1_2中所有兴趣爱好有三项的学生

    db.getCollection('grade_1_2').find({"hobby": {$size: 3}})

    查看一年级二班`grade_1_2`中所有兴趣爱好包括画画的学生

    db.getCollection('grade_1_2').find({"hobby": "drawing"})

    查看一年级二班`grade_1_2`中所有兴趣爱好既包括画画又包括跳舞的学生

    db.getCollection('grade_1_2').find({"hobby": {$all: ["drawing", "dance"]}})

    查看一年级二班grade_1_2中所有兴趣爱好有三项的学生的学生数目

    db.getCollection('grade_1_2').find({"hobby": {$size: 3}}).count()

    查看一年级二班的第二位学生

    db.getCollection('grade_1_2').find({}).limit(1).skip(1)

    查看一年级二班的学生,按年纪升序

    db.getCollection('grade_1_2').find({}).sort({"age": 1})

    查看一年级二班的学生,按年纪降序

    db.getCollection('grade_1_2').find({}).sort({"age": -1})

      5,范围

    查看一年级二班的学生,年龄值有哪些

    db.getCollection('grade_1_2').distinct('age')

    查看一年级二班的学生,兴趣覆盖范围有哪些

    db.getCollection('grade_1_2').distinct('hobby')

    查看一年级二班的学生,男生(`sex`为 0)年龄值有哪些

    db.getCollection('grade_1_2').distinct('age', {"sex": 0})

      6,删除

    一年级二班grade_1_2, 删除所有 4 岁的学生

    db.getCollection('grade_1_2').remove({"age": 4})

    一年级二班grade_1_2, 删除第一位 6 岁的学生

    db.getCollection('grade_1_2').remove({"age": 6}, {justOne: 1})

      7,修改

    一年级二班grade_1_2中,修改名为zhangsan7的学生,年龄为 8 岁,兴趣爱好为 跳舞和画画;

    db.getCollection('grade_1_2').update({"name": "zhangsan7"}, {$set: {"age": 8, "hobby": ["dance", "drawing"]}})

     一年级二班`grade_1_2`中,追加zhangsan7`学生兴趣爱好唱歌;

    db.getCollection('grade_1_2').update({"name": "zhangsan7"}, {$push: {"hobby": "sing"}})

     一年级二班`grade_1_2`中,追加zhangsan7`学生兴趣爱好吹牛和打篮球;

    db.getCollection('grade_1_2').update({"name": "zhangsan7"}, {$push: {"hobby": {$each: ["brag", "play_basketball"]}}})

     一年级二班`grade_1_2`中,追加`zhangsan7`学生兴趣爱好唱歌和打篮球,要保证`hobby`数组不重复;

    db.getCollection('grade_1_2').update({"name": "zhangsan7"}, {$addToSet: {"hobby": {$each: ["sing1", "play_basketball"]}}})

    新学年,给一年级二班所有学生的年龄都增加一岁

    db.getCollection('grade_1_2').update({}, {$inc: {"age": 1}}, {multi: true})

    一年级二班grade_1_2中,删除zhangsan7学生的sex属性

    db.getCollection('grade_1_2').update({"name": "zhangsan7"}, {$unset: {"sex": 1}})

    一年级二班grade_1_2中,删除zhangsan7学生的hobby数组中的头元素

    db.getCollection('grade_1_2').update({"name": "zhangsan7"}, {$pop: {"hobby": -1}})

     一年级二班`grade_1_2`中,删除`zhangsan7`学生的`hobby`数组中的尾元素

    db.getCollection('grade_1_2').update({"name": "zhangsan7"}, {$pop: {"hobby": 1}})

     一年级二班`grade_1_2`中,删除`zhangsan7`学生的`hobby`数组中的`sing`元素

    db.getCollection('grade_1_2').update({"name": "zhangsan7"}, {$pull: {"hobby": "sing"}}) 

      8,分组

    新建一个集合grade_1_4,记录一年级四班在期中考试时的成绩;

        for (var i = 1; i <= 10; i++) {
    
            db.grade_1_4.insert({
    
                "name": "zhangsan" + i,
    
                "sex": Math.round(Math.random() * 10) % 2,
    
                "age": Math.round(Math.random() * 6) + 3,
    
                "score": {
    
                    "chinese": 60 + Math.round(Math.random() * 40),
    
                    "math": 60 + Math.round(Math.random() * 40),
    
                    "english": 60 + Math.round(Math.random() * 40)
    
                }
    
            });
    
        }

    统计每名学生在考试中的总分

     db.grade_1_4.group({
    
           key: {"name": 1},
    
           cond: {},
    
           reduce: function(curr, result) {
    
    result.total += curr.score.chinese + curr.score.math + curr.score.english;
    
           },
    
           initial: { total : 0 }
    
       })

    统计每名男生在考试中的总分

     db.grade_1_4.group({
    
           key: {"name": 1},
    
           cond: {"sex": 0},
    
           reduce: function(curr, result) {
    
    result.total += curr.score.chinese + curr.score.math + curr.score.english;
    
           },
    
           initial: { total : 0 }
    
       })

    统计每名男生在考试中的总分及平均分

     db.grade_1_4.group({
    
           key: {"name": 1},
    
           cond: {"sex": 0},
    
           reduce: function(curr, result) {
    
    result.total += curr.score.chinese + curr.score.math + curr.score.english;
    
           },
    
           initial: { total : 0 },
    
           finalize: function(item) {
    
    item.avg = (item.total / 3).toFixed(2);
    
    return item;
    
           }
    
       })

      9,聚合

    根据姓名分组, 并统计人数

     db.getCollection('grade_1_4').aggregate([
    
           {$group: {_id: "$name", num: {$sum: 1}}}
    
       ])

    根据姓名分组, 并统计人数,过滤人数大于 1 的学生

      db.getCollection('grade_1_4').aggregate([
    
           {$group: {_id: "$name", num: {$sum: 1}}},
    
           {$match: {num: {$gt: 1}}}
    
       ])

    统计每名学生在考试中的总分

      db.getCollection('grade_1_4').aggregate([
    
           {$group: {_id: "$name", score: {$sum: {$sum: ["$score.chinese", "$score.math", "$score.english"]}}}}
    
    ])

    统计每名男生在考试中的总分

    db.getCollection('grade_1_4').aggregate([
    
       {$match: {sex: 0}},
    
       {$group: {_id: "$name", score: {$sum: {$sum: ["$score.chinese", "$score.math", "$score.english"]}}}}
    
    ])

    统计每名男生在考试中的总分, 总分降序

    db.getCollection('grade_1_4').aggregate([
    
           {$match: {sex: 0}},
    
           {$group: {_id: "$name", score: {$sum: {$sum: ["$score.chinese", "$score.math", "$score.english"]}}}},
    
           {$sort: {score: 1}}
    
    ])
    

      

  • 相关阅读:
    JAVA日报
    JAVA日报
    JAVA日报
    JAVA日报
    JAVA日报
    JAVA日报
    JAVA日报
    剑指 Offer 20. 表示数值的字符串
    剑指 Offer 51. 数组中的逆序对
    剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
  • 原文地址:https://www.cnblogs.com/msq2000/p/11947204.html
Copyright © 2020-2023  润新知