这里介绍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}}

])

  

版权声明:本文为msq2000原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/msq2000/p/11947204.html