1. MongoDB简介
- MongoDB 是一个介于关系型数据库与非关系型数据库之间的一个数据库 ;
- MongoDB 的数据是存放在磁盘上的 , 以类似于json格式(bson)进行存储 ;
2. MongoDB体系结构
3. MongoDB数据类型
docker安装mongodb
查找 MongDB 镜像
命令:docker search mongodb
拉取镜像
docker pull mongo
运行容器
docker run -itd --name mongo -p 27017:27017 mongo --auth
进入容器内部 创建root用户
docker exec -it mongo mongo admin
创建一个名为 root,密码为 root ,角色为root的用户 。
db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'root', db: 'admin'}]});
下载robo 3T并打开
点击右上角的小电脑的图标
点击create
完善信息之后点击save
选择刚才创建的数据库点击connect,完成连接,然后就可以使用了
mongodb中的基本操作
增
向数据库中插入文档的三种方式:
- db..insert()//将一个或多个文档插入到集合中,(可以是对象,也可以是数组)。
- db..insertOne()//将单个文档插入到集合中,(只能传对象)。
- db..insertMany()//将多个文档插入到集合中,(必须传数组)。
当我们像集合中插入文档的时候,如果没有给文档指定_id,那么数据库会自动为文档添加_id。
注意:_id属性我们也可以自己指定,但是建议自动生成不要自己指定 该属性为文档的唯一标示(比如我们在实际开发中想要吧开发数据库中的数据导入到生产的数据库中,为了避免有相同的数据而发生冲突,_id作为文档的唯一标示,就解决了这个问题)
*/
db.test.find({"age": {"$lt": 7}})
db.test.insert({name:'李大狗',age:22})
db.test.insertOne({name:'wwt',age:22})
db.test.insert([
{name:'舍河上',age:22},
{name:'白骨精',age:22},
{name:'蜘蛛精',age:22}
])
db.test.insert({_id:'hello',name:'cindy',age:22})
查
- db.collection.find()//返回数据库中符合条件的所有文档
- find()返回的是一个数组//可以通过索引去拿到确切的某一个的值,例如:db.test.find()[0]
- 查询数据库中所有符合条件的文档
- 可以接受一个对象作为条件参数
- db..find().count()//返回数据库中符合条件的文档数量
db.集合名.find().limit(数量) // 限制数量
db.集合名.find().skip(数量) // 跳过指定数量
db.test.find().limit(4).skip(1)
实际开发中的分页db.numbers.find({}).skip((页码-1)*每页显示的条数).limit(10)
排序:db.集合名.find().sort({“字段名”:1});注意:也可以同时指定多个排序规则:db.集合名.find().sort({“字段名1”:1},{“字段名2”:-1})//表示先按照字段名1进行升序,如果字段名1的属性值相同再按照字段名2进行降序排列。
1: 表示升序
-1:表示降序
limit、skip、sort在调用的时候可以以任意的顺序进行调用,不影响结果。
比较查询
大于:$gt
小于:$lt
大于等于:$gte
小于等于:$lte
非等于:$ne
db.<collection>.find({"age": {"$gt": 7}});
db.<collection>.find({"age": {"$lt": 2}});
db.<collection>.find({"age": {"$lt": 4, "$gt": 2}});
db.<collection>.find({"age": {"$lte": 4, "$gte": 2}});
db.<collection>.find({"age": {"$ne": 9}});
$or或者
db.<collection>.find({"$or": [{"age": 0}, {"name": "李大狗9"}]});
in和not in查询(包含、不包含)
db.<collection>.find({"age": {"$in": [3, 6, 9]}});
db.<collection>.find({"age": {"$nin": [3, 6, 9]}});
指定字段返回: db.集合名.find({},{“字段名”:0});
1:返回
0:不返回 # 如下: _id 不返回,即不显示 _id。
db.<collection>.find().sort({"age": -1}).limit(4);
db.<collection>.find({}, {"name": 1, "age": 1, "_id": 0});
db.<collection>.findOne()//返回数据库中符合条件的第一个文档
findOne()返回的是一个对象//可以这样使用db.test.findOne().name
改
- db.集合名.update({“条件字段名”:”字段值”},{$set:{“要修改的字段名”:”修改后的字段值”}});//默认只修改匹配到的第一个文档
db.<collection>.update({"name": "李大狗3"}, {"$set": {"age": 55}});//如果修改的字段不存在则直接创建一个新的字段
db.<collection>.update({"name: "李大狗"}, {"$unset": {"age": 20}});//`$unset`,删除了name为李大狗的age字段
db.<collection>.update({"name": "李大狗"}, {"$set": {"age": 6}},{ multi:true });//查询到的文档全部修改,增加`multi`属性为true
db.<collection>.update({"name": "李大狗"}, {"$inc": {"age": 2}},{ multi:true });//给姓名是李大狗的人员的年龄增加一岁,\$inc表示:在原来的基础上自增
删(很少使用)
- db..remove({“age”: {“gt”: 50}});//删除符合条件的所有文档,有几个就删除几个
- db..remove({“age”: {“gt”: 50}},true);//传递第二个参数为true就会只删除符合条件的第一个文档
- db..drop()//删除集合