使用homebrew安装
brew install mongodb
配置
1.系统根目录下创建文件夹
~ sudo mkdir -p /data/db
2.给data/db文件夹赋予权限
~ whoami
apple
~ sudo chown apple /data/db
3.添加环境变量(这里用的zsh终端,所以配置zsh文件)
vim ~/.zshrc
写入 export PATH=/usr/local/Cellar/mongodb/4.0.4_1/bin:${PATH}
~ source ~/.zshrc
让其生效
启动
~ mongod
新建一个终端
~ mongod -version
// db version v4.0.3
~ mongo
// 进入数据库
db.shutdownServer()
// 退出
操作命令
查看数据库: show dbs
选择要操作的数据库:use DBNAME(数据库名字)
查看集合:show collections
查看集合里面的内容:db.COLLECTIONNAME(集合名字).find();
查看当前操作的数据库:db 或者 db.getName()
创建数据库:use 要创建的数据名
数据的添加:db.COLLECTIONNAME(集合名字).insert({name:"张三",age:19})
数据操作
增加:db.COLLECTIONNAME.insert({name:"张三",age:19});
sava添加操作
db.COLLECTIONNAME.sava({name:"李四",age:18});
sava更新操作
db.COLLECTIONNAME.save({ "_id" : ObjectId("5a67e9b5abb73ea4bf24d0f0"), "name" : "张三2", "age" : 20 })
删除:remove()
db.COLLECTIONNAME.remove({name:"张三"},{配置项(可选)})
注意:updata默认是只会更新符合条件的多条数据中的一条数据,remove默认配置是只会删除符合条件数据的所有数据
// 数据查询
db.COLLECTIONNAME.find({条件},{字段})
eg: 查询数据库中大于30岁的人
db.COLLECTIONNAME.find({age:{$gt:18}})
条件查询
大于 gt
小于 lt
大于等于 gte
不等于 ne
等于 :
正则
eg:
db.COLLECTIONNAME.find({name:/^王/}) //查询所有以王 开头的name
且
直接用逗号隔开
db.COLLECTIONNAME.find({name:"张三", age:19})
或 $or
db.COLLECTIONNAME.find({$or:[{age: 19},{age:18}]})
分页
skip()
限制条数
limit()
排序
sort()
汇总数
count()
MongoDB
-
一个数据库对应多个集合
- 一个集合对应多个文档对象
- 在mongo中不论是db还是集合,你都无需去创建他
- 直接就当他已经存在,直接Use来使用
- use db名称;
- 接着会被切换到该db中
-
db.要创建的集合名称.save({})
;这样集合就被创建了
- use db名称;
-
解决32位异常
mongod --dbpath="路径" --journal --storageEngine=mmapv1
-
1:启动服务器
-
mongod --dbpath "D:/mongodb/db"
// 目录一定要存在自己创建随便名称‘- 尽量设置在非系统盘
C盘生成目录是需要权限的
- 尽量设置在非系统盘
- 如果看到
waiting for connections on port 27017
说明服务已经启动
-
-
客户端连接服务器另开一个命令行
-
mongo
默认连接的是test数据库
-
-
查询有哪些数据库
- 查询数据库:
show dbs;
- 切换数据库:
use 数据库名;
- 查询数据库:
-
查询当前db下有哪些集合
show collections;
-
查询数据:
-
db.集合名.find();
//查询出来的是文档对象 document db.users.find();
-
-
添加数据:
-
db.集合名.save(对象)
//mongo默认会给我们加入_id作为该文档对象的唯一标识 db.users.save({contry:'中国',name:'小明',score:77});
-
-
删除数据:
-
db.集合名.remove(条件对象);
//条件匹配就会被删除 db.users.remove({name:'小明'});
- 如果给定一个空对像,会匹配全部
-
-
更新数据:
db.集合名.update({匹配条件对象},{$set:{修改后的对象}});
db.users.update({name:'小明'},{$set:{contry:'印度'}});;
条件查询
练习:
查询姓名为小明的学生
db.users.find({name:'小明'});; 查询英语成绩大于90分的同学
db.users.find({score:{$gt:90}}); //查找成绩大于90分$gt
//$lt小于
查询数学成绩不等于88的同学
db.users.find({score:{$ne:88}}); 查询总分大于200分的所有同学
db.users.find({score:{$gt:200}});
分页
db.users.find().skip(3).limit(3);
- db.集合名称.find().跳到3.显示3条
+ limit 0,3
排序
db.users.find().sort({key:排序方式});
-
db.users.find().sort({'score':1});
//正数代表升序,负数代表降序
模糊匹配
db.users.find({name:{$regex:'小'}});
db.users.find({name:{$regex:'明'}});
聚合函数
- 需要求当前集合的记录数:
db.users.find().count();
- 求最大值
-求整个集合的总成绩
+ db.集合名.聚合({ 组的划分规则{_id:'1',显示内容:{score'}} })- 求所有人的平均分
db.users.aggregate({$group:{_id:'1',sumscore:{$avg:'$score' } }});
- 求按国家分组,求所有国家的总分
db.users.aggregate({$group:{_id:'$contry',sumScore:{$sum:'$score'}}});
- 求所有人的平均分
- 添加基础数据:
db.users.save({contry:'中国',name:'小明',score:77});
db.users.save({contry:'中国',name:'小红',score:88});
db.users.save({contry:'中国',name:'小张',score:99});
db.users.save({contry:'美国',name:'jack',score:45});
db.users.save({contry:'美国',name:'rose',score:67});
db.users.save({contry:'美国',name:'mick',score:89});
联合查询
db.orders.insert([
{ "_id" : 1, "item" : "almonds", "price" : 12, "quantity" : 2 },
{ "_id" : 2, "item" : "pecans", "price" : 20, "quantity" : 1 },
{ "_id" : 3 }
]);
db.inventory.insert([
{ "_id" : 1, "sku" : "almonds", description: "product 1", "instock" : 120 },
{ "_id" : 2, "sku" : "bread", description: "product 2", "instock" : 80 },
{ "_id" : 3, "sku" : "cashews", description: "product 3", "instock" : 60 },
{ "_id" : 4, "sku" : "pecans", description: "product 4", "instock" : 70 },
{ "_id" : 5, "sku": null, description: "Incomplete" },
{ "_id" : 6 }
]);
db.orders.aggregate([
{
$lookup:
{
from: "inventory",
localField: "item",
foreignField: "sku",
as: "inventory_docs"
}
}
]);
网友评论