• MongoDB常用命令


    基本操作

    • 查看所有库

      show databases;show dbs;
      

      image-20220925084638923

      注意:

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

      > use 库名                          # 创建并使用库   注: `use 库名` 也用来切换库 
      

      image-20220925084947693

      db 命令用来查看当前所在的库

      注意: use 代表创建并使用,当库中没有数据时默认不显示这个库

      image-20220925085459516

    • 删除数据库

      • 默认删除当前所在的库
      > db.dropDatabase()
      

      image-20220925090924988

      一旦删除当前所在的库后, 使用 show dbs; 会发现这个库已经消失了. 但是使用 db; 会发现自己还在这个库, 不要紧, 这个库实际上已经被删除了.

    • 查看当前所在库

      > db;
      

      image-20220925091146391

    集合

    • 查看库中所有集合

      show collections;show tables;
      

      image-20220925191437406

    • 创建集合

      db.createCollection('集合名称', [options])
      
      例: 
      db.createCollection('users');
      db.createCollection('orders');
      db.createCollection('products',{max:100,capped:true,size:5000});
      
      注: 不写 options 配置的话默认使用的是默认配置
      

      image-20220925191836048

      options可以是如下参数:

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

    注意:当集合不存在时,向集合中插入文档也会自动创建该集合。

    • 删除集合

      db.集合名称.drop();
      
      例:
      db.products.drop();
      

      image-20220925193650933

    文档

    参考文档: https://docs.mongodb.com/manual/reference/method/

    • 插入文档

      • 单条文档

        > db.集合名称.insert({"name":"编程不良人","age":23,"bir":"2012-12-12"});
        
        例:
        db.users.insert({"name":"编程不良人","age":23,"bir":"2012-12-12"});
        

        image-20220925202843671

      • 多条文档

        > db.集合名称.insertMany(
           [ <document 1> , <document 2>, ... ],
           {
         			writeConcern: 1,//写入策略,默认为 0,即不要求确认写操作,1 是要求。
              ordered: true //指定是否按顺序写入,默认 true,按顺序写入。
           }
        )
        > db.集合名称.insert([
          	{"name":"不良人","age":23,"bir":"2012-12-12"},
          	{"name":"小黑","age":25,"bir":"2012-12-12"}
        ]);
        
        例:
        db.users.insertMany([{"name":"小黑","age":21},{_id:1,"name":"小红","age":26}]);
        
        db.users.insert([{"name":"小三","age":21},{"name":"小明","age":26}]);
        

        image-20220925202934461

      • 脚本方式

        for(let i=3;i<9;i++){
            db.users.insert({"_id":i,"name":"不良人"+i,"age":i+10});
        }
        

        image-20220925203004927

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

    • 查询所有

      > db.集合名称.find();
      
      例:
      db.users.find();
      

      image-20220925202812338

    • 删除文档

      db.集合名称.remove(
         <query>,
         {
           justOne: <boolean>,				   		# 如果为true代表仅仅删除一条
           writeConcern: <document>			 		# 设置如果删除失败抛出的异常级别是什么
         }
      )
      
      例:
      db.users.remove({_id:1}); 						# 删除_id为1的文档
      db.users.remove({_id: ObjectId("63304610d3cb487a94b9eb70")}); #删除使用自动生成的_id的文档
      db.users.remove({age:21}); 						# 删除users集合中age为21的文档(如果符合多条就都删除)
      
      db.users.remove({});             			# 删除所有
      

      参数说明:

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

      image-20220925205127328

      image-20220925205303495

    • 更新文档

      db.集合名称.update(
         <query>,
         <update>,
         {
           upsert: <boolean>,
           multi: <boolean>,
           writeConcern: <document>
         }
      );
      
      例:
      db.users.update({age:25},{age:28});		#不保留原始字段,相当于先删除在更新,新文档由后面字段组成
      
      db.users.update({_id:9},{$set:{age:25}});   # 保留原始字段,在原始文档基础上更新指定字段
      
      db.users.update({age:23},{$set:{age:24}},{multi:true}); 
      # 在原始文档基础上更新,将所有年龄为23的更新为24(因为multi:true则如果多条文档符合全部更新)
      
      db.users.update({age:23},{$set:{age:24}},{multi:true,upsert:true});
      # 在原始文档基础上更新,如果age为23的不存在就插入后面字段组成的文档
      
      
      注: 设置更新文档的字段更新为什么时,可以出现文档没有的字段,相当于为文档增加了新字段
      db.users.update({_id:9},{$set:{age:25, like:'读书'}});
      like字段不是_id为9文档的字段,但是这条操作之后,_id为9的文档就会具有这个新字段
      

      参数说明:

      • query : update的查询条件,类似sql update查询内where后面的。
      • update : update的对象和一些更新的操作符(如 , , ,inc…)等,也可以理解为sql update查询内set后面的
      • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
      • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
      • writeConcern :可选,抛出异常的级别。
      - db.集合名称.update({"name":"zhangsan"},{name:"11",bir:new date()}) 
       `这个更新是将符合条件的全部更新成后面的文档,相当于先删除再更新,删除原来文档,新文档由后面字段组成`
       `注:文档的 _id 并不会被替代`
      - db.集合名称.update({"name":"xiaohei"},{$set:{name:"mingming"}})
       `保留原始文档,然后更新字段,但是只更新符合条件的第一条数据`
      - db.集合名称.update({name:”小黑”},{$set:{name:”小明”}},{multi:true})		
       `保留原来数据更新,更新符合条件的所有数据`
      - db.集合名称.update({name:”小黑”},{$set:{name:”小明”}},{multi:true,upsert:true})
       `保留原来数据更新,更新符合条件的所有数据 没有条件符合时插入数据
      

    image-20220926063004403

    image-20220926063021360

    image-20220926063503361

    image-20220926064009813

    文档查询

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

    语法

    > db.集合名称.find(query, projection)
    
    • query :可选,使用查询操作符指定查询条件
    • projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。

    如果你需要以易读的方式来读取数据,可以使用 pretty() 方法结构化显示文档,语法格式如下:

    > db.集合名称.find().pretty()
    
    例: 
    db.users.find().pretty();				 # 格式化方式显示所有文档
    注: 只会对文档的字段写在一起过长的文档进行格式化
    

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

    image-20220926065843382

    对比语法

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

    image-20211214123631600

    例:
    db.users.find({age:24});                       # 查询users集合中年龄为24的文档
    db.users.find({age:{$lt:24}});								 # 查询users集合中年龄小于24的文档	
    db.users.find({age:{$lte:24}});								 # 查询users集合中年龄小于等于24的文档
    db.users.find({age:{$gt:25}});								 # 查询users集合中年龄大于25的文档	
    db.users.find({age:{$gte:25}});								 # 查询users集合中年龄大于等于25的文档	
    db.users.find({age:{$ne:25}});								 # 查询users集合中年龄不等于25的文档	
    db.users.find({name:{$ne:'不良人'}});					 # 查询users集合中name不为'不良人'的文档
    

    image-20220926073657332

    AND

    > db.集合名称.find({key1:value1, key2:value2,...}).pretty()
    
    例:
    db.users.find({age:24,name:'不良人_0'});								# 查询age为24且name为'不良人_0'的文档
    
    注意:
    查询时如果一个字段出现多次,后面的字段会把前面相同的字段的值覆盖,所以下面这句话意思是查询年龄大于等于28的
    db.users.find({age:24,age:{$gte:28}});                # 查询users集合中age大于等于28的文档
    

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

    image-20220926075734929

    OR

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

    > db.集合名称.find(
       {
          $or: [
             {key1: value1}, {key2:value2}
          ]
       }
    ).pretty()
    
    例:
    db.users.find({$or:[{name:'不良人_0'},{age:28}]}); 	# 查询name为'不良人_0'或age为28的文档
    db.users.find({$or:[{name:'不良人_0'},{age:{$gt:24}}]}); #查询name为'不良人_0'或age大于24的文档
    

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

    image-20220926080503601

    AND 和 OR 联合

    类似SQL语句为:'where age >50 AND (name = '编程不良人' OR name = 'MongoDB')'

    > db.集合名称.find({"age": {$gt:50}, $or: [{"name": "编程不良人"},{"name": "MongoDB"}]}).pretty();
    
    例:
    db.users.find({"age":{$gte:24},$or:[{_id:9},{_id:11}]});
    

    image-20220926085912147

    数组中查询

    -- 测试数据
    > db.集合名称.insert({ "_id" : 11, "age" : 29, "likes" : [ "看电视", "读书xx"], "name" : "不良人_xx_11" })
    -- 执行数组查询
    > db.users.find({likes:"看电视"})
    -- $size 按照数组长度查询
    > db.users.find({likes:{$size:2}});
    
    
    例:
    # 先插入一条数据
    db.users.insert({ "_id" : 12, "age" : 29, "likes" : [ "看电视", "读书xx"], "name" : "不良人_xx_12" });
    # 执行数组查询
    db.users.find({likes:"看电视"});					# 查询likes数组中 有一个为 '看电视的' 文档
    db.users.find({likes:{$size:2}});				# 查询likes数组长度为2的文档
    

    image-20220926093412068

    模糊查询

    类似 SQL 中为 'where name like '%name%''

    > db.users.find({likes://});
    
    mongodb中的查询是靠正则表达式实现的
    例:
    db.users.find({name://});							# 查询name中含 '良' 的文档
    db.users.find({likes://});							# 查询likes中含 '书' 的文档
    

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

    image-20220926094656646

    排序

    > db.集合名称.find().sort({name:1,age:1}),
      1 升序  -1 降序
    
    例:
    db.users.find().sort({age:1});           # 按照age进行升序排列
    db.users.find().sort({age:-1});					 # 按照age进行降序排列
    db.users.find().sort({age:-1,name:1});   # 按照age进行降序排列,age相同则按照name升序排列
    

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

    image-20220926135924467

    image-20220926135944426

    分页

    > db.集合名称.find().sort({条件}).skip(start).limit(rows);
    
    例:
    db.users.find().skip(0).limit(2);					# 从第0条开始显示两条文档
    

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

    image-20220926141258439

    总条数

    > db.集合名称.count();
    > db.集合名称.find({"name":"编程不良人"}).count();
    
    例:
    db.users.find({age:24}).count();          # 查询age为24的文档总条数
    

    类似于 SQL 语句为: 'select count(id) from ....'

    image-20220926141426577

    去重

    > db.集合名称.distinct('字段')
    
    例:
    db.users.distinct('age');
    

    类似于 SQL 语句为: 'select distinct name from ....'

    image-20220926141716569

    指定返回字段

    > db.集合名称.find({条件},{name:1,age:1}) 
    - 参数2: 1 返回  0 不返回    `注意:一条语句中1和0不能同时出现`
    	当使用1时只返回指定1的字段,其他字段都不显示
    	当使用0时不显示指定0的字段,其他字段都显示
    
    例:
    db.users.find({},{name:1});					# 只显示name字段,注意_id默认是显示的,所以_id和name都显示
    db.users.find({},{age:0});					# 不显示age字段,其他字段都显示	
    

    image-20220926150556850

  • 相关阅读:
    详解prettier使用以及与主流IDE的配合
    h264编码笔记(nal_ref_idc)
    使用wordpress搭建官网
    【Java面试】MongoDB
    企业工程项目管理系统源码(三控:进度组织、质量安全、预算资金成本、二平台:招采、设计管理)
    防火墙设置
    vue+element模仿电商商城,前后端分离实现,下单微信扫码支付
    VUE+websocket编写实现PC web端控制摄像头
    python代码轻松下载youtube视频
    京东运营数据分析:2023年8月京东宠物主粮行业品牌销售排行榜
  • 原文地址:https://blog.csdn.net/qq_50313418/article/details/127092157