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一行数据)操作
新增(一条、多条)
- 通过命令
 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是集合名,不存在自动创建
- 
通过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() //报错- 
删除一个 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定义,是从头开始删还是从尾开始删,可以做队列了
 
                    
                     
                    
                 
                    
                
 



 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号