4.MongoDB命令语法基本使用

Shell

Mongo shell是基于JavaScript语法的,MongoDB使用了SpiderMonkey作为其内部的JavaScript解释器引擎,这是由Mozilla官方提供的JavaScript内核解释器,该解释器也被同样用于大名鼎鼎的Firefox浏览器产品之中。SpiderMonkey对ECMA Script标准兼容性非常好,可以支持ECMA Script 6。

数据库操作

#下面一系列操作需先通过如下命令进入shell,
./mongo --port 27017 --shell
#27017端口是默认值,如果没改,可不写,改了必须加上
  • 查看

    show dbs #查看所有库
    
  • 切换\创建

    use my_db #切换数据库,数据库不存在则创建,创建后必须创建表才会通过show dbs 查出
    
  • 删除

    db.dropDatabase()#use哪个库,就删哪个
    

集合(等同MySql中table)操作

#下面一系列操作需先通过如下命令进入shell,
./mongo --port 27017 --shell
#27017端口是默认值,如果没改,可不写,改了必须加上
  • 查看(两种方式)

    show tables
    show collections
    
  • 创建

    db.createCollection("my_table")
    #直接通过下方插入文档命令,也可创建集合
    
  • 删除

    db.my_table.drop()
    #my_table是创建的集合名称
    
  • 创建集合参数

    db.createCollection(name,options)
    

    options参数

    image-20220316223128518

文档(等同于MySql一行数据)操作

新增(一条、多条)

  1. 通过命令
 db.my_table.insertOne({"name":"inserOne"})#插入一条
 db.my_table.insert({"name":"insert"}) #插入一条
 db.my_table.save({"name":"save"})#插入一条
 db.my_table.insertMany([{"name":"inserMany_1"},{"name":"inserMany_2"}])#插入多条 
 #insertOne&insertMany官方推荐使用,返回值更详细
 #my_table是集合名,不存在自动创建
  1. 通过JS脚本

    • 创建批量插入js
    var dataArr=[]; 
    for(var i=0;i<100;i++){
    	var data={
    		batch_index:i,
    		batch_name:"batch_name_"+i,
    	}
    	dataArr.push(data);
    }
    db.batch_table.insertMany(dataArr);
    
    • 进入mongoDb shell,执行

      load("/usr/local/mongodb/config/batchInsert.js")
      #我把刚创建的js文件放到config目录了
      

查询(查全部、条件查询、分页、模糊查询、指定返回结果列、排序)

  • 查询全部

    db.batch_table.find()
    #batch_table为创建的集合名,默认显示20条,通过"it"查看更多
    
  • 查询第一条记录

    db.batch_table.findOne()
    #batch_table为创建的集合名
    
  • 条件查询

    db.batch_table.find({batch_index:19})
    #将batch_index:19的匹配数据查出
    db.batch_table.find({_id: ObjectId("6232a63131a4945b90caea02")})
    #根据id查
    db.batch_table.find({batch_index:{$gt:17},batch_name:"batch_name_37"})
    #根据batch_index>17并且 batch_name=batch_name_37 的记录
    

    附:查询条件字典

    image-20220317114951699

  • 排序

    db.batch_table.find().sort({batch_index:-1})
    #根据batch_index排序
    # 1 (for ascending) 
    #-1 (for descending)
    
  • 分页

    db.batch_table.find().skip(10).limit(5)
    #从第10条(>=)开始,查询五条记录
    
  • 模糊查询

    db.batch_table.find({batch_name:/_1/})
    db.batch_table.find({batch_name包含“_1”的:{$regex:"_1"})
    #模糊查找batch_name包含“_1”的
    
  • 指定查询出某些列(类似不用select *的意思)

    db.batch_table.find({},{batch_index:false,batch_name:false})
    db.batch_table.find({},{batch_index:0,batch_name:0})
    #指定列如果没有查询条件,必须加空的{}
    #第二个参数为要查询出的列名
    #列名参数必须要么都是true,要么都是false
    #false:不返回 true:返回
    #false=1,true=0
    

修改

  • 根据条件更改

    db.batch_table.update({"_id" : ObjectId("6232a63131a4945b90cae9ef")},{ "batch_name" : "update_batch_name_0"})
    #上面命令会将匹配到的文档完全更新为新的结构
    #部分字段更新、删除具体规则见下方
    

    附:更新命令字典

    db.collection.update(query,update,options)
    #query:描述更新的查询条件;
    #update:描述更新的动作及新的内容;
    #options:描述更新的选项
        #upsert:可选,如果不存在update的记录,是否插入新的记录。默认false,不插入
        #multi:可选,是否按条件查询出的多条记录全部更新。默认false,只更新找到的第一条记录
        #writeConcern :可选,决定一个写操作落到多少个节点上才算成功。
    

    image-20220317140031216

  • 更新并获得返回值

     db.batch_table.findAndModify({query:{"_id" : ObjectId("6232a63131a4945b90cae9ef")},update:{$set:{newfield:1}}})
     #将对应数据列新增一列,并返回更新前的文档信息
      db.batch_table.findAndModify({query:{"_id" : ObjectId("6232a63131a4945b90cae9ef")},update:{$set:{newfield:1}},new:true})
    #加上“new:true”hou ,将对应数据列新增一列,并返回更新后的文档信息
    #findOneAndUpdate:更新单个文档并返回更新前(或更新后)的文档。
    #findOneAndReplace:替换单个文档并返回替换前(或替换后)的文档。
    
  • 其他

    #update命令的选项配置较多,为了简化使用还可以使用一些快捷命令:
    updateOne:更新单个文档。
    updateMany:更新多个文档。
    replaceOne:替换单个文档。
    

    更多语法见官方

删除

  • remove

    1.批量删除

    db.batch_table.remove({"batch_name" : "update_batch_name_1"})
    #根据匹配到的数据删除
    #db.batch_table.remove({batch_name:“update_batch_name_1”})// batch_name 等于update_batch_name_1的记录
    #db.batch_table.remove({}) // 删除所有记录
    #db.batch_table.remove() //报错
    
    1. 删除一个

      db.batch_table.remove({"batch_name" : "update_batch_name_1"},true)
      #删除满足条件的首条记录
      
  • delete

    官方推荐使用 deleteOne() 和 deleteMany() 方法删除文档,语法格式如下:

    db.batch_table.deleteMany ({}) //删除集合下全部文档
    db.batch_table.deleteMany ({"batch_name" : "update_batch_name_1"}) //删除匹配的全部文档
    db.batch_table.deleteOne ({"batch_name" : "update_batch_name_1"}) //删除 匹配到 的一个文档
    #都是顺序删除,不可选择头还是尾删除
    

    注意: remove、deleteMany等命令需要对查询范围内的文档逐个删除,如果希望删除整个集合,则使 用drop命令会更加高效

  • 删除并获得返回值

    findOneAndDelete(可做队列)

    db.batch_table.findOneAndDelete((({batch_index:{$lt:5}})))
    #删除后会获得删除的文档
    db.batch_table.findOneAndDelete({batch_index:{$lt:10}},{sort:{batch_index:-1}})
    #根据sort定义,是从头开始删还是从尾开始删,可以做队列了
    
posted @ 2022-03-24 10:57  RollBack2010  阅读(177)  评论(0编辑  收藏  举报