• MongoDB相关基础操作(库、集合、文档)



    一、库的相关操作

    1、查看数据库

    查看所有数据库有两种命令:

    show databases
    或
    show dbs
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    2、查看当前库

    最新版的MongoDB在>的左边已经显示当前的数据库名称了。

    db
    
    • 1

    在这里插入图片描述

    3、创建数据库

    use命令是创建并使用(如果数据库已经有了则是切换数据库)

    use gedeshidai
    
    • 1

    注意:
    MongoDB有一种机制:当数据库中没有数据的时候,命令show dbs不会显示
    当输入db的时候,会显示创建的数据(db命令是显示当前使用的数据库)
    但是当我们在新建的数据库中插入一条数据后,就能显示出来了。

    db.users.insert({name:'gedeshidai'});
    
    • 1

    在这里插入图片描述
    注意:

    • admin:从权限的角度来看,这是" root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
    • local:这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合。
    • conlig :当Mongo用于分片设置时, config数据库在内部使用,用于保存分片的相关信息。

    4、删除数据库

    默认删除当前数据库

    db.dropDatabase()
    
    • 1

    在这里插入图片描述
    虽然已经删除数据库gedeshidai,但是我们当前仍在gedeshidai数据库里面,这点需要注意。这是MongoDB的机制。
    在这里插入图片描述

    二、集合的相关操作

    1、查看库中所有集合

    show collections
    或
    show tables
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    2、创建集合

    2.1、显示创建

    db.createCollection('集合名称',[options])
    
    • 1

    options可以是如下参数(可选):

    字段类型描述
    capped布尔(可选)如果为true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。当该值为true时,必须指定size参数
    size数值(可选)为固定集合指定一个最大值,即字节数。如果capped为true,也需要指定该字段
    max数值(可选)指定固定集合中包含文档的最大数量。

    在这里插入图片描述

    2.2、隐式创建

    注意:当集合不存在时,向集合中插入文档也会自动创建该集合
    在这里插入图片描述

    3、删除集合

    db.集合名称.drop();
    
    • 1

    在这里插入图片描述

    三、文档的相关操作

    官网地址:https://www.mongodb.com/docs/manual/crud/

    1、插入文档

    1.1、插入单条文档

    db.集合名称.insert(document)
     -- 举例:
    db.users.insert({"name":"哥的时代","age":21,"bir":"2023-11-19"});
     ​
     -- db.集合名称.insertOne():向指定集合中插入一条文档数据【推荐使用】
    db.users.insertOne({"name":"哥的时代","age":21,"bir":"2023-11-19"});
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    1.2、插入多条文档

    db.collection.insertMany():向指定集合中插入多条文档数据【推荐使用】
    db.集合名称.insertMany(
        [ <document 1> , <document 2>, ... ],
        {
           writeConcern: 1,//写入策略,默认为1,即要求确认写操作,0是不要求。
           ordered: true //指定是否按顺序写入,默认true,按顺序写入。
        }
     )
     -- 举例:
    db.users.insert([
         {"name":"哥的时代","age":21,"bir":"2023-11-19"},
         {"name":"小黑","age":22,"bir":"2023-11-19"}
     ]);
     或
    db.users.insertMany([
         {"name":"哥的时代","age":21,"bir":"2023-11-19"},
         {"name":"小黑","age":22,"bir":"2023-11-19"}
    ]);
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    1.3、脚本方式

    for(let i=0;i<100;i++){
         db.users.insert({"_id":i,"name":"哥的时代_"+i,"age":21});
     }
     ​
     -- 1、先创建数组
     -- 2、将数据放在数组中
     -- 3、一次 insert 到集合中
     var arr = [];
     for(var i=1 ; i<=20000 ; i++){
         arr.push({num:i});
     }
     db.numbers.insert(arr);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    注意:在mongodb中每个文档都会有一个_id作为唯一标识,_id默认会自动生成,如果手动指定将使用手动指定的值作为_id 的值。

    2、查询文档

    db.集合名称.find();
    
    • 1

    3、删除文档

     db.集合名称.remove(
        <query>,
        {
          justOne: <boolean>,
          writeConcern: <document>
        }
     )
     -- 由于remove()方法已经过时了,现在官方推荐使用deleteOne()和deleteMany()方法。
    db.集合名称.deleteMany({query})  -- 不指定条件时删除集合下全部文档
    db.users.deleteMany({});
    db.users.deleteMany({age:21});
     ​
    db.集合名称.deleteOne({query})  -- 删除一条文档
    db.users.deleteOne({_id:ObjectId("65586ebacd3d67eac1aec0d4")});
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    参数说明:

    • query :可选删除的文档的条件。

    • justOne : 可选如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。

    • writeConcern :可选抛出异常的级别。

    注意:文档内容全部删除后,文档仍存在,即删除内容,不删除结构

    4、更新文档

    db.集合名称.update(
        <query>,
        <update>,
        {
          upsert: <boolean>,
          multi: <boolean>,
          writeConcern: <document>
        }
     );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    参数说明:

    • query : update的查询条件,类似sql update查询内where后面的。

    • update : update的对象和一些更新的操作符(如 , , ,inc…)等,也可以理解为sql update查询内set后面的

    • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。

    • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

    • writeConcern :可选,抛出异常的级别。

      • WriteConcern.NONE:没有异常抛出

      • WriteConcern.NORMAL:仅抛出网络错误异常,没有服务器错误异常

      • WriteConcern.SAFE:抛出网络错误异常、服务器错误异常;并等待服务器完成写操作。

      • WriteConcern.MAJORITY: 抛出网络错误异常、服务器错误异常;并等待一个主服务器完成写操作。

      • WriteConcern.FSYNC_SAFE: 抛出网络错误异常、服务器错误异常;写操作等待服务器将数据刷新到磁盘。

      • WriteConcern.JOURNAL_SAFE:抛出网络错误异常、服务器错误异常;写操作等待服务器提交到磁盘的日志文件。

      • WriteConcern.REPLICAS_SAFE:抛出网络错误异常、服务器错误异常;等待至少2台服务器完成写操作。

    • db.集合名称.update({“name”:“zhangsan”},{name:“11”,bir:new date()})
      这个更新是将符合条件的全部更新成后面的文档,相当于先删除在更新
    • db.集合名称.update({“name”:“xiaohei”},{$set:{name:“mingming”}})
      保留原来数据更新,但是只更新符合条件的第一条数据
    • db.集合名称.update({name:”小黑”},{$set:{name:”小明”}},{multi:true})
      保留原来数据更新,更新符合条件的所有数据
    • db.集合名称.update({name:”小黑”},{$set:{name:”小明”}},{multi:true,upsert:true})
      `保留原来数据更新,更新符合条件的所有数据,没有条件符合时插入数据

    注意:在7.x版本的时候update()方法已经不适用了,官网提供了以下方法进行操作:

    db.collection.updateOne()
    最多更新与指定筛选器匹配的单个文档 即使多个文档可能与指定的筛选器匹配。
    
    db.collection.updateMany()
    更新与指定筛选器匹配的所有文档。
    
    db.collection.replaceOne()
    最多替换与指定筛选器匹配的单个文档 即使多个文档可能与指定的筛选器匹配。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    5、查询文档

    MongoDB查询文档使用find()方法。find()方法以非结构化的方式来显示所有文档。

    5.1、语法

    db.集合名称.find(query, projection)
    
    • 1
    • query :可选,使用查询操作符指定查询条件

    • projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。

    如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:

    db.集合名称.find().pretty()
    
    • 1

    注意: pretty()方法以格式化的方式来显示所有文档

    5.2、对比语法

    如果你熟悉常规的 SQL 数据,通过下表可以更好的理解 MongoDB 的条件语句查询:

    操作格式范例RDBMS中的类似语句
    等于{:}db.col.find({“by”:“哥的时代”}).pretty()where by = ‘哥的时代’
    小于{:{$lt:}}db.col.find({“likes”:{$lt:50}}).pretty()where likes < 50
    小于或等于{:{$lte:}}db.col.find({“likes”:{$lte:50}}).pretty()where likes <= 50
    大于{:{$gt:}}db.col.find({“likes”:{$gt:50}}).pretty()where likes > 50
    大于或等于{:{$gte:}}db.col.find({“likes”:{$gte:50}}).pretty()where likes >= 50
    不等于{:{$ne:}}db.col.find({“likes”:{$ne:50}}).pretty()where likes != 50

    5.3、AND

    db.集合名称.find({key1:value1, key2:value2,...}).pretty()
    
    • 1

    类似于 WHERE 语句:WHERE key1=value1 AND key2=value2

    • db.users.find({“age”:27,“name”:“哥的时代”,_id:8});

    • db.users.find({“age”:3,“age”:32});同一字段多次出现查询条件时,只有最后的查询条件才生效,即后面会覆盖前面的查询条件

    5.4、OR

    MongoDB OR 条件语句使用了关键字 $or,语法格式如下:

    db.集合名称.find({$or: [{key1: value1}, {key2:value2}]}).pretty()
    
    • 1

    类似于 WHERE 语句:WHERE key1=value1 or key2=value2

    • db.users.find({$or:[{_id:4},{age:18}]});

    5.5、AND 和 OR 联合

    类似SQL语句为:‘where age >25 AND (name = ‘哥的时代’ OR name = ‘MongoDB’)’

    db.集合名称.find({"age": {$gt:25}, $or: [{"name": "哥的时代"},{"name": "MongoDB"}]}).pretty();
    
    • 1
    • db.users.find({age:{KaTeX parse error: Expected 'EOF', got '}' at position 6: gt:15}̲,or:[{_id:3},{age:15}]});

    5.6、数组中查询

    -- 测试数据
    db.集合名称.insert({ "_id" : 11, "age" : 29, "likes" : [ "看电视", "读书xx", "美女" ], "name" : "哥的时代_xx_11" })
     -- 执行数组查询
     > db.users.find({likes:"看电视"})
     -- $size 按照数组长度查询
     > db.users.find({likes:{$size:3}});
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    5.7、模糊查询

    类似 SQL 中为 ‘where name like ‘%name%’’

    db.users.find({likes:/哥/});
    
    • 1

    注意:在 mongoDB 中使用正则表达式可以是实现近似模糊查询功能

    5.8、排序

    db.集合名称.find().sort({name:1,age:1})
    - 1 升序  -1 降序
    
    • 1
    • 2

    类似 SQL 语句为: ‘order by name,age’

    5.9、分页

    db.集合名称.find().sort({条件}).skip(start).limit(rows);
    
    • 1

    类似于 SQL 语句为: ‘limit start,rows’

    5.10、总条数

    db.集合名称.count();
    db.集合名称.find({"name":"哥的时代"}).count();
    
    • 1
    • 2

    类似于 SQL 语句为: ‘select count(id) from …’

    DeprecationWarning: Collection.count() is deprecated. Use countDocuments or estimatedDocumentCount.

    • db.users.countDocuments();

    • db.users.estimatedDocumentCount();

    5.11、去重

    db.集合名称.distinct('字段')
    
    • 1

    类似于 SQL 语句为: ‘select distinct name from …’

    • db.users.distinct(“age”);

    5.12、指定返回字段

    db.集合名称.find({条件},{name:1,age:1}) 
    - 参数2: 1 返回  0 不返回  
    
    • 1
    • 2
    • db.users.find({},{“name”:1});查询所有,返回指定字段

    • db.users.find({age:{$lt:17}},{name:1});按照指定条件查询,返回指定字段

    • db.users.find({age:{$lt:17}},{_id:0,name:1});按照指定条件查询,返回指定字段,不返回id,注意id是唯一索引


    总结

    以上就是MongoDB相关基础操作(库、集合、文档)的知识点,希望对你有所帮助。

  • 相关阅读:
    向毕业妥协系列之机器学习笔记:高级学习算法-神经网络(二)
    如何提取 x64 程序那些易失的方法参数
    Vue中v-model原理
    Vue项目中可能存在的问题和解决方案
    Ubuntu22.04启用root账户 2208120941
    在使用 sqlite 时遇到的奇怪问题的正解
    为什么MyBatis是Java数据库持久层的明智选择
    ai智能语音机器人是如何影响客户体验的?电销机器人部署
    进程间通信---对管道的详细讲解(图文案例讲解)
    YYGH-8-预约挂号
  • 原文地址:https://blog.csdn.net/m0_64074924/article/details/134478638