• MongoDB安装及基本操作


    系列文章目录

    提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加


    提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


    前言

    提示:这里可以添加本文要记录的大概内容:


    一、MongoDB安装

    mongodb4.4链接:https://pan.baidu.com/s/1q8oAMGCzVvh2qf2q2PI0cw?pwd=1234
    提取码:1234

    二、图形化界面

    1. Navicate for MongoDB
      Navicate百度网盘链接:https://pan.baidu.com/s/1bdNMJKC7zq59N6l1mQOzlw?pwd=1234
      提取码:1234
    2. Robo 3T/Studio 3T
      官网下载链接:https://studio3t.com/download-thank-you/?OS=win64
      百度网盘链接:https://pan.baidu.com/s/1hXEXDhYWCqBkYlHHAc4NRg?pwd=1234
      提取码:1234
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    三、MongoDB基本操作

    1. 插入文档

    db.people.insert({_id:1,name:"zhangsan",sex:"男",age:21})
    db.people.insert({_id:2,name:"lisi",sex:"男",age:20})
    db.people.insert({_id:3,name:"wangwu",sex:"女",age:20})
    db.people.insert({_id:4,name:"zhaoliu",sex:"女",age:18})
    db.people.insert({_id:5,name:"wuqi",sex:"男",age:19})
    db.people.find()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    _id唯一标识文档,如果文档中已经存在_id:5,此时再插入会报错

    在这里插入图片描述
    当然也可以使用insertMany()函数一次插入多个文档

    //插入3个文档,使用insertMany()函数
    db.col.insertMany([
    {
       title: 'MongoDB Overview', 
       description: 'MongoDB is no sql database',
       by_user: 'runoob.com',
       url: 'http://www.runoob.com',
       tags: ['mongodb', 'database', 'NoSQL'],
       likes: 100
    },
    {
       title: 'NoSQL Overview', 
       description: 'No sql database is very fast',
       by_user: 'runoob.com',
       url: 'http://www.runoob.com',
       tags: ['mongodb', 'database', 'NoSQL'],
       likes: 10
    },
    {
       title: 'Neo4j Overview', 
       description: 'Neo4j is no sql database',
       by_user: 'Neo4j',
       url: 'http://www.neo4j.com',
       tags: ['neo4j', 'database', 'NoSQL'],
       likes: 750
    }])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    在这里插入图片描述

    2. 更新文档

    更新第一个文档,将“zhangsan”改为"zhangsanfeng"

    db.people.update({_id:1},{$set:{name:"zhangsanfeng"}})
    
    • 1

    在这里插入图片描述

    3. 删除文档

    remove()是删除集合中所有文档,执行后仍然存在people集合

    db.people.remove({})
    
    • 1

    在这里插入图片描述

    而drop()是删除集合,执行后不存在people集合

    db.people.drop()
    
    • 1

    在这里插入图片描述

    4. 查询文档

    在这里插入图片描述
    4.1 查询年龄大于19岁的人数

    db.people.find({age:{$gt:19}})
    
    • 1

    在这里插入图片描述
    4.2 查询年龄小于等于20岁的人数

    db.people.find({age:{$lte:20}})
    
    • 1

    在这里插入图片描述
    4.3 AND操作

    db.people.insert({_id:6,name:"lisi",sex:"男",age:20})
    db.people.insert({_id:7,name:"lisi",sex:"男",age:21})
    db.people.find()
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    此时有三个name="lisi"的文档,如何查找年龄为20的lisi?通过AND操作

    db.people.find({name:"lisi",age:21})
    
    • 1

    在这里插入图片描述
    两个key-value之间通过逗号隔开即可

    4.4 OR操作
    查找wangwu或者zhaoliu的信息

    db.people.find({$or:[{name:"wangwu"},{name:"zhaoliu"}]})
    
    • 1

    在这里插入图片描述
    注意OR和AND的区别,OR两个key-value之间是用{}分开的。

    5. 聚合基本操作

    //1. 统计男生、女生的总年龄
    db.people.aggregate([
    {$group:{_id:"$sex",age_sum:{$sum:"$age"}}}
    ])
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    //2.统计男生女生的总人数
    db.people.aggregate([
    {$group:{_id:"$sex",people_sum:{$sum:1}}}
    ])
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述
    $sum:1表示统计总数,比如男为3位,女为2位

    //3.求学生总数和平均年龄
    db.people.aggregate([
    {$group:{_id:null,people_sum:{$sum:1},
    avg_age:{$avg:"$age"}}}
    ])
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    //4.查询男生、女生人数,按人数升序
    db.people.aggregate([
    {$group:{_id:"$sex",people_sum:{$sum:1}}},
    {$sort:{people_sum:1}}
    ])
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述
    $sort中,1为升序,-1为降序

    //5.先按性别分组,分完组之后将age属性映射到数组中:
    db.people.aggregate([
    {$group:{_id:"$sex",num:{$push:"$age"}}}
    ])
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    6. 索引

    什么是索引?为什么需要索引?
    相当于书的目录,减少查询时间

    //插入10万条数据对比索引优点
    for(var i=0;i<100000;i++)
    db.col2.insert({name:'a',time:i})
    db.col2.find()
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述
    5.1 不使用索引查询time:100-20000间的数据耗时29ms

    db.col2.find({time:{$gt:100,$lt:20000}}).explain("executionStats")
    
    • 1

    在这里插入图片描述
    5.2 创建索引后再来查询
    创建索引

    db.col2.createIndex({time:1})
    
    • 1

    在这里插入图片描述
    5.3 查询索引

    db.col2.getIndexes()
    
    • 1

    在这里插入图片描述
    5.4 删除索引

    db.col2.dropIndex("time_1")
    
    • 1

    在这里插入图片描述
    此时time_1索引已被删除,最好是退出后重新查询,可以看到耗时0毫秒

    db.col2.find({time:{$gt:100,$lt:20000}}).explain("executionStats")
    
    • 1

    在这里插入图片描述
    5.5 索引几种类型

    5.5.1 组合(复合)索引
    同时创建两个及以上索引

    db.col2.createIndex({"name":1,"time":-1})
    
    • 1

    在这里插入图片描述
    5.5.2 多值索引

    db.col3.insert({name:"lisi",tag:["a","b","c"]})
    db.col3.createIndex({tag:1})
    db.col3.find({tag:"b"})
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    5.5.3 全文索引

    db.col3.createIndex({"name":"text"})
    
    • 1

    在这里插入图片描述

    1. 索引

    2. 创建索引

    3. 查看


    总结

    以上就是今天要讲的内容,本文仅仅简单介绍了mongoDB的使用,而mongoDB提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 相关阅读:
    Unity3D开发流程及注意事项
    SWT/ANR问题--当发送ANR/SWT时候如何打开binder trace(BinderTraces)
    2024.4.3-[作业记录]-day08-CSS 盒子模型(溢出显示、伪元素)
    用这个免费CDN,治愈WordPress网站加载缓慢的大难题
    APUS与深圳大学大数据国家工程实验室联合训练开源中文大模型
    计算机毕业设计springboot+vue+elementUI高考填报志愿综合参考系统
    近世代数——Part2 群:基础与子群
    Acwing 842. 排列数字
    JAVA小知识22:迭代器iterator与列表迭代器ListIterator
    字典常用方法
  • 原文地址:https://blog.csdn.net/xiaoren886/article/details/133875784