2.MongoDB的常用命令(CRUD)

一,数据库操作

1)选择和创建数据库语法

use 数据库名

use命令的规则是,如果存在对应的数据库那么就切换,不存在就创建

2)数据库的删除

db.dropDatabase()

3)查看有权限的数据库

show dbs 或者 show databases

注意:当你使用use命令创建了一个新的数据时,使用show dbs是看不到你刚才的数据的,因为show dbs看的是磁盘里的数据库,而你创建的这个数据库还在内存中,只有新创建的数据库有一个集合时才会持久化到磁盘中;
4)查看当前使用的数据库

db

通过shell连接本地MongoDB数据库简单操作

>*******************创建新库,并切换到新库,已存在的库则会直接切换*******************
> use mydb
switched to db mydb
>
>******************显示当前使用的库********************
> db
mydb
>
>*******************删除当前库*******************
> db.dropDatabase()
{ "ok" : 1 }
>
>*******************显示所有的库*******************
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
>

在这里插入图片描述

二,集合操作

集合就是对应关系型数据的表

1)集合的显示创建(显示创建)

db.createConllection(“集合名”)

2)集合查看

show collections

3)集合删除

db.集合名.drop() 或 db.collection.drop()

举例:

>******************查看当前使用的那个库*******************
> db
mydb
>
>*******************创建集合(mysql的表)*******************
> db.createCollection("myCollection")
{ "ok" : 1 }
>
>*******************查询当前库下所有的集合*******************
> show collections
myCollection
>
>*******************删除集合*******************
> db.myCollection.drop()
true

4)集合隐式创建就是创建文档是没有对应的集合,系统自动创建

三,文档的基本CRUD

文档就是关系型数据一条一条的数据,只是mongodb的文档数据结构和JSON基本一致;
1),文档的插入

单个文档插入:

db.myCollection.insert(要插入的数据) 或 db.myCollection.save(要插入的数据)

批量文档插入:

db.myCollection.insertMany([ 要插入的数据,要插入的数据,要插入的数据 . . . . . . ])

注意:批量插入时出现异常,后面的数据不会再执行,而前面已插入成功的不会回滚;

try{}catch{}来输出异常

try{ 插入语句 }catch(e){ print(e); }

文档查询:

db.集合名.find() 或 db.集合名.find({你要查询的条件})

举例:

>*******************插入一条数据*******************
> db.myCollection.insert({"_id":"1","name":"张三","age":NumberInt(10),"time":new Date()})
WriteResult({ "nInserted" : 1 })
>
> db.myCollection.find()
{ "_id" : "1", "name" : "张三", "age" : 10, "time" : ISODate("2021-12-04T11:51:59.724Z") }
>
>******************批量插入多条数据*******************
> db.myCollection.insertMany([{"_id":"2","name":"张三","age":NumberInt(10),"time":new Date()},{"_id":"3","name":"张三","age":NumberInt(10),"time":new Date()}])
{ "acknowledged" : true, "insertedIds" : [ "2", "3" ] }
>
> db.myCollection.find()
{ "_id" : "1", "name" : "张三", "age" : 10, "time" : ISODate("2021-12-04T11:51:59.724Z") }
{ "_id" : "2", "name" : "张三", "age" : 10, "time" : ISODate("2021-12-04T11:53:53.746Z") }
{ "_id" : "3", "name" : "张三", "age" : 10, "time" : ISODate("2021-12-04T11:53:53.746Z") }
>

2),文档的查询
查询某个集合所有的数据:

db.集合名.find()

根据条件查询:

db.集合名.find({你要查询的条件})

根据条件查询一条类似于mysql的limit 1 :

db.集合名.findOne({你要查询的条件}) 或 db.集合名.findOne()

投影查询,查询想要展示的参数

db.集合名.findOne({你要查询的条件},{要展示的字段:1,不想展示id:0})

> db.myCollection.find()
{ "_id" : "1", "name" : "张三", "age" : 10, "time" : ISODate("2021-12-04T11:51:59.724Z") }
{ "_id" : "2", "name" : "张三", "age" : 10, "time" : ISODate("2021-12-04T11:53:53.746Z") }
{ "_id" : "3", "name" : "张三", "age" : 10, "time" : ISODate("2021-12-04T11:53:53.746Z") }
{ "_id" : "5", "name" : "张三", "age" : 10, "time" : ISODate("2021-12-04T12:12:30.737Z") }
{ "_id" : "6", "name" : "李四", "age" : 10, "time" : ISODate("2021-12-04T12:12:30.737Z") }
>
>*******************查名字为李四的数据*******************
> db.myCollection.find({"name":"李四"})
{ "_id" : "6", "name" : "李四", "age" : 10, "time" : ISODate("2021-12-04T12:12:30.737Z") }
>
>*******************查名字为李四的数据但是只展示name字段id字段默认会展示*******************
> db.myCollection.find({"name":"李四"},{"name":1}))
{ "_id" : "6", "name" : "李四" }
>*******************查名字为李四的数据,只展示名字,id也不展示*******************
> db.myCollection.find({"name":"李四"},{"name":1,"_id":0})
{ "name" : "李四" }
>

更多复杂查询操作看下面的第 5)6)节;

3),文档的更新

覆盖文档更新

db.集合名.update({更新条件},{更新的内容})

注意:这样更新会将之前字段全部都替换掉,自剩下你更新的内容

局部修改

db.集合名.update({更新条件},{$set:{更新的内容}})

注意:如果匹配到多条数据,这样的修改只会修改第一条数据

批量修改

db.集合名.update({更新条件},{$set:{更新的内容}},{multi:true})

列值增值

db.集合名.update({更新条件},{$inc:{更新的内容}})

举例:

> db.myCollection.find()
{ "_id" : "1", "name" : "张三", "age" : 23, "time" : ISODate("2021-12-05T04:18:54.868Z") }
{ "_id" : "2", "name" : "李四", "age" : 10, "time" : ISODate("2021-12-05T04:18:54.868Z") }
{ "_id" : "3", "name" : "王五", "age" : 10, "time" : ISODate("2021-12-05T04:18:54.868Z") }
{ "_id" : "4", "name" : "赵六", "age" : 10, "time" : ISODate("2021-12-05T04:18:54.868Z") }
>
>*******************覆盖修改id为1的这条数据将会被替换为{“age”:27}*******************
> db.myCollection.update({_id:"1"},{"age":NumberInt(27)}))
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
>
> db.myCollection.find()
{ "_id" : "1", "age" : 27 }
{ "_id" : "2", "name" : "李四", "age" : 10, "time" : ISODate("2021-12-05T04:18:54.868Z") }
{ "_id" : "3", "name" : "王五", "age" : 10, "time" : ISODate("2021-12-05T04:18:54.868Z") }
{ "_id" : "4", "name" : "赵六", "age" : 10, "time" : ISODate("2021-12-05T04:18:54.868Z") }
>
>*******************修改id等于2这条数据的年龄为33(如果匹配到多条也只会修改第一条)*******************
> db.myCollection.update({"_id":"2"},{$set:{"age":NumberInt(33)}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
>
>
> db.myCollection.find()
{ "_id" : "1", "age" : 27 }
{ "_id" : "2", "name" : "李四", "age" : 33, "time" : ISODate("2021-12-05T04:18:54.868Z") }
{ "_id" : "3", "name" : "王五", "age" : 10, "time" : ISODate("2021-12-05T04:18:54.868Z") }
{ "_id" : "4", "name" : "赵六", "age" : 10, "time" : ISODate("2021-12-05T04:18:54.868Z") }
>
>*******************修改年龄为10的数据的名字为凯撒大帝(批量修改)*******************
> db.myCollection.update({"age":10},{$set:{"name":"凯撒大帝"}},{multi:true})))
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })
>
> db.myCollection.find()
{ "_id" : "1", "age" : 27 }
{ "_id" : "2", "name" : "李四", "age" : 33, "time" : ISODate("2021-12-05T04:18:54.868Z") }
{ "_id" : "3", "name" : "凯撒大帝", "age" : 10, "time" : ISODate("2021-12-05T04:18:54.868Z") }
{ "_id" : "4", "name" : "凯撒大帝", "age" : 10, "time" : ISODate("2021-12-05T04:18:54.868Z") }
>
>*******************给id为1这条数据的年龄加2*******************
> db.myCollection.update({"_id":"1"},{$inc:{"age":NumberInt(2)}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
>
> db.myCollection.find()
{ "_id" : "1", "age" : 29 }
{ "_id" : "2", "name" : "李四", "age" : 33, "time" : ISODate("2021-12-05T04:18:54.868Z") }
{ "_id" : "3", "name" : "凯撒大帝", "age" : 10, "time" : ISODate("2021-12-05T04:18:54.868Z") }
{ "_id" : "4", "name" : "凯撒大帝", "age" : 10, "time" : ISODate("2021-12-05T04:18:54.868Z") }
>

4),文档的删除
根据条件删除

db.集合名.remove(条件) 或 db.集合名.deleteMany(条件)

删除集合下所有数据

db.集合名.remove({})

举例

> db.myCollection.find()
{ "_id" : "2", "name" : "李四", "age" : 33, "time" : ISODate("2021-12-05T04:18:54.868Z") }
{ "_id" : "3", "name" : "凯撒大帝", "age" : 10, "time" : ISODate("2021-12-05T04:18:54.868Z") }
{ "_id" : "4", "name" : "凯撒大帝", "age" : 10, "time" : ISODate("2021-12-05T04:18:54.868Z") }
{ "_id" : "1", "age" : 29 }
{ "_id" : "5", "age" : 29 }
>
>*******************删除年龄为29的数据*******************
> db.myCollection.remove({"age":29})
WriteResult({ "nRemoved" : 2 })
>
> db.myCollection.find()
{ "_id" : "2", "name" : "李四", "age" : 33, "time" : ISODate("2021-12-05T04:18:54.868Z") }
{ "_id" : "3", "name" : "凯撒大帝", "age" : 10, "time" : ISODate("2021-12-05T04:18:54.868Z") }
{ "_id" : "4", "name" : "凯撒大帝", "age" : 10, "time" : ISODate("2021-12-05T04:18:54.868Z") }
>
>*******************删除指定集合所有的数据*******************
> db.myCollection.remove({})
WriteResult({ "nRemoved" : 3 })
>
>
>db.myCollection.find()
>

5)文档的分页查询

统计查询

db.集合名.count(条件没有条件统计所有)

返回指定的记录数

db.集合名.find().limit(数字)

跳过指定的数据得到指定之后的数据

db.集合名.find().skip(数字)

分页查询,就是limit()和skip()配合使用

db.集合名.find().limit(页容量).skip(查询的起始位置=(当前页-1)*页容量)

排序查询

db.集合名.find().sort(条件:-1) ; -1的话就是降序 1就是升序,可同时支持多个条件排序

举例:

>
> db.myCollection.find()
{ "_id" : "1", "name" : "张三", "age" : 23, "time" : ISODate("2021-12-05T05:10:29.313Z") }
{ "_id" : "2", "name" : "李四", "age" : 43, "time" : ISODate("2021-12-05T05:10:29.313Z") }
{ "_id" : "3", "name" : "王五", "age" : 10, "time" : ISODate("2021-12-05T05:10:29.313Z") }
{ "_id" : "4", "name" : "赵六", "age" : 10, "time" : ISODate("2021-12-05T05:10:29.313Z") }
{ "_id" : "5", "name" : "田七", "age" : 9, "time" : ISODate("2021-12-05T05:10:29.313Z") }
>
>*******************统计指定集合的所有数据总量*******************
> db.myCollection.count()
5
>*******************统计年龄等于10的数据*******************
> db.myCollection.count({"age":10})
2
>*******************跳过前三条数据的数据*******************
> db.myCollection.find().skip(3)
{ "_id" : "4", "name" : "赵六", "age" : 10, "time" : ISODate("2021-12-05T05:10:29.313Z") }
{ "_id" : "5", "name" : "田七", "age" : 9, "time" : ISODate("2021-12-05T05:10:29.313Z") }
>
>*******************分页查询*******************
> db.myCollection.find().limit(2).skip(0)
{ "_id" : "1", "name" : "张三", "age" : 23, "time" : ISODate("2021-12-05T05:10:29.313Z") }
{ "_id" : "2", "name" : "李四", "age" : 43, "time" : ISODate("2021-12-05T05:10:29.313Z") }
>
> db.myCollection.find().limit(2).skip(2)
{ "_id" : "3", "name" : "王五", "age" : 10, "time" : ISODate("2021-12-05T05:10:29.313Z") }
{ "_id" : "4", "name" : "赵六", "age" : 10, "time" : ISODate("2021-12-05T05:10:29.313Z") }
> db.myCollection.find().limit(2).skip(4)
{ "_id" : "5", "name" : "田七", "age" : 9, "time" : ISODate("2021-12-05T05:10:29.313Z") }
>
>******************按按年龄降序,然后按id升序的数据*******************
> db.myCollection.find().sort({age:-1},{_id:1})
{ "_id" : "2", "name" : "李四", "age" : 43, "time" : ISODate("2021-12-05T05:10:29.313Z") }
{ "_id" : "1", "name" : "张三", "age" : 23, "time" : ISODate("2021-12-05T05:10:29.313Z") }
{ "_id" : "3", "name" : "王五", "age" : 10, "time" : ISODate("2021-12-05T05:10:29.313Z") }
{ "_id" : "4", "name" : "赵六", "age" : 10, "time" : ISODate("2021-12-05T05:10:29.313Z") }
{ "_id" : "5", "name" : "田七", "age" : 9, "time" : ISODate("2021-12-05T05:10:29.313Z") }
>

6)复杂查询
mongo的查询支持正则

模糊查询

db.集合名.find({name:/张/})

查询以指定字段开头的数据

db.myCollection.find({name:/^王/}))

范围查询

<,<=, >,>=这个操作符也是很常用的,格式如下:

db . 集 合 名 称 . find ( { “field”{ $gt: value }}) // 大于:field > value
db. 集 合 名 称 . find ( {“field” { $lt: value }}) // 小于:field < value
db. 集合 名 称 . find ( { “field”{ $gte: value }}) // 大于等于:field >= value
db .集 合 名 称 . find ( { “field”{ $lte: value }}) // 小于等于:field <= value
db .集合名称.find({ “field”( { $ne: value }}) // 不等于:field != value

示例:查询评论点缴量大于700的记录

db . comment.find({likenum:{$gt:NumberInt(700)}})

包含不包含查询

db.集合名.find({age:{$in:[23,9]}}) 包含年龄为23和9的

db.集合名.find({age:{$nin:[23,9]}}) 不包含年龄为23和9的

条件查询and和or
在这里插入图片描述
举例:

> db.myCollection.find()
{ "_id" : "1", "name" : "张三", "age" : 23, "time" : ISODate("2021-12-05T05:10:29.313Z") }
{ "_id" : "2", "name" : "李四", "age" : 43, "time" : ISODate("2021-12-05T05:10:29.313Z") }
{ "_id" : "3", "name" : "王五", "age" : 10, "time" : ISODate("2021-12-05T05:10:29.313Z") }
{ "_id" : "4", "name" : "赵六", "age" : 10, "time" : ISODate("2021-12-05T05:10:29.313Z") }
{ "_id" : "5", "name" : "田七", "age" : 9, "time" : ISODate("2021-12-05T05:10:29.313Z") }
>
>
>*******************模糊查询带名字带张的数据*******************
> db.myCollection.find({name://})
{ "_id" : "1", "name" : "张三", "age" : 23, "time" : ISODate("2021-12-05T05:10:29.313Z") }
> db.myCollection.find({name:/^/}))
{ "_id" : "3", "name" : "王五", "age" : 10, "time" : ISODate("2021-12-05T05:10:29.313Z") }
>
>*******************查询年龄大于10的数据*******************
> db.myCollection.find({"age":{$gt:10}})
{ "_id" : "1", "name" : "张三", "age" : 23, "time" : ISODate("2021-12-05T05:10:29.313Z") }
{ "_id" : "2", "name" : "李四", "age" : 43, "time" : ISODate("2021-12-05T05:10:29.313Z") }
>
>*******************查询年龄不包含23,9的数据*******************
> db.myCollection.find({age:{$nin:[23,9]}})
{ "_id" : "2", "name" : "李四", "age" : 43, "time" : ISODate("2021-12-05T05:10:29.313Z") }
{ "_id" : "3", "name" : "王五", "age" : 10, "time" : ISODate("2021-12-05T05:10:29.313Z") }
{ "_id" : "4", "name" : "赵六", "age" : 10, "time" : ISODate("2021-12-05T05:10:29.313Z") }
>
>*******************查询年龄包含23,9的数据*******************
> db.myCollection.find({age:{$in:[23,9]}})
{ "_id" : "1", "name" : "张三", "age" : 23, "time" : ISODate("2021-12-05T05:10:29.313Z") }
{ "_id" : "5", "name" : "田七", "age" : 9, "time" : ISODate("2021-12-05T05:10:29.313Z") }
>
>
>*******************查询年龄大于9且小于40的数据*******************
> db.myCollection.find({$and:[{"age":{$gt:9}},{"age":{$lt:40}}]})
{ "_id" : "1", "name" : "张三", "age" : 23, "time" : ISODate("2021-12-05T05:10:29.313Z") }
{ "_id" : "3", "name" : "王五", "age" : 10, "time" : ISODate("2021-12-05T05:10:29.313Z") }
{ "_id" : "4", "name" : "赵六", "age" : 10, "time" : ISODate("2021-12-05T05:10:29.313Z") }
>

总结:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值