--打开cmd命令窗口
- 输入mongod 启动mongodb服务器
-- 再打开一个窗口
- 输入mongo 连接mongodb 出现 >
- 32 位注意:
启动服务器是,需要输入如下内容
mongod --storageEngine=mmapv1
--dbpath 指定路径 --port 指定端口号
--服务器
用来保存数据
mongod 用来启动服务器
--- 客户端
操作数据
mongo 用来启动客户端
---将MongoDB设置为系统服务,可以自动在后台启动,不要每次手动启动
1. 在c盘根目录创建data
- 在data 下创建db和log 文件夹
2 创建配置文件
在目录 C:\Program Files\MongoDB\Server\4.2 添加一个配置文件
mongod.cfg
3. 以管理员身份打开命令行
4 执行如下的命令:
sc.exe create MongoDB binPath="\" C:\Program Files\MongoDB\Server\4.2\bin\mongod.exe\" --service --config=\"C:\Program Files\MongoDB\Server\4.2\mongod.cfg\"" DisplayName="MongoDB" start="auto"
sc.exe create MongoDB binPath="\" mongodbin目录\mongod.exe\" --service --config=\"mongod安装目录\mongod.cfg\"" DisplayName="MongoDB" start="auto"
5.启动mongdb 任务管理器-服务-找到MongoDb 右击 启动
数据库(database)
数据库是一个仓库,在仓库中存放集合
集合(collection)
集合类似于数组,在集合中可以存放文档
文档(document)
文档数据库中的最小单位,我们存储和操作的内容都是文档。
在MongoDB中,数据库和集合都不需要手动创建,当我们创建文档时,如果文档所在的集合和数据库不存在会自动数据库和集合
----
如何使用MongoDB
show databases/ show dbs
- 显示数据库
use 数据库名
- 进入到指定的数据库中
db
-查看当所处的数据库
show collections
- 查看数据库中有几个集合
- 数据库的CRUD(增删改查)的操作
向数据库中插入文档
db.<collection>.insert(doc)
- 向集合中插入一个文档
- 例子:向test数据库中的stus 集合中插入一个新的学生对象
{name:"孙悟空",age:18,gender:"男"}
db.stus.insert({name:"孙悟空",age:18,gender:"男"})
====================================================
Mongoose 是一个让我们可以通过Node来操作MongoDB的模块。
Mongoose 是一个对象文档模型(ODM)库,它对Node原生的MongoDB模块进行了进一步的优化封装,并提供了更多的功能。
在大多数情况下,它被用来把结构化的模式应用到一个MongoDB集合,并提供了验证和类型转换等好处。
Node 里面就有一个MongoDB,并提供了验证和类型转换等好处
可以为文档创建一个模式结构(Schema)
可以对模型中的对象/文档进行验证
数据可以通过类型转换为对象模型
可以使用中间件来应用业务逻辑挂钩
比Node 原生的MongoDB 驱动更容易
==
mongoose 中为我们提供了几个对象
-Schema(模式对象)
.schema对象定义约束了数据库中的文档结构
-Model
.model对象作为集合中的所有文档的展示,相当于MongoDB 数据库中的集合collection
-Document
document表示集合中的具体文档,相当于计划中的一个具体的文档。
二、 使用中的试题例子
// 1.进入my_test数据库
use my_test;
// 2. 向数据库的user 集合中插入一个稳定
db.users.insert({username:"sunwukong"})
show dbs;
// 3. 查询user集合中的文档
db.users.find();
// 4. 向数据库的user集合中插入一个文档
db.users.insertOne({username:"zhubajie"})
// 5. 查询数据库user集合中的文档
db.users.find();
// 6. 统计数据库user集合中的文档数量
db.users.find().count()
// 7.查询数据库user集合中username为sunwukong的文档
db.users.find({username:"sunwukong"})
// 8.向数据库user集合中的username为sunwukong的文档,添加一个address属性,属性值为huaguoshan
db.users.update({username:"sunwukong"},{$set:{address:"huaguoshan"}})
// 9.使用{username:"tangseng"}替换username为zhubajie的文档
db.users.replaceOne({username:"zhubajie"},{username:"tangseng"})
// 10.删除username 为sunwukong的文档的address属性
db.users.update({username:"sunwukong"},{$unset:{address:1}})
// 11.向username为sunwukong的文档中,添加一个hobby:{cities:["beijing","shanghai","shenzhen"],moves:["sanguo","hero"]}
// mongoDb 的文档属性也可以是一个文档,当一个文档的属性是
db.users.update({username:"sunwukong"},{$set:{hobby:{cities:["beijing","shanghai","shenzhen"],moves:["sanguo","hero"]}}})
db.users.update({username:"sunwukong"},{$unset:{cities:1,moves:1}});
// 12 向usernaeme 为tangseng的文档中,添加一个hoby:{movies:[{"A Chinese Odyssey","King of"}]}
db.users.update({username:"tangseng"},{$set:{hobby:{movies:["A Chinese Odyssey","King of comedy"]}}})
// 13.查询喜欢电影hero的文档
// MongoDB 支持直接通过内嵌文档属性进行查询,如果要查询内嵌文档则可以通过。的形式匹配
// 如果要通过内嵌文档进行查询,此时属性名必须使用引号
db.users.find({'hobby.moves':"hero"});
//14. 向唐僧添加一个电影Interatellar
// $push 用于向数据中家人一个新的元素
// $addToSet 向数组中添加一个新元素,如果数组中存在了该元素则添加失败则不会添加
db.users.update({username:"tangseng"},{$addToSet:{"hobby.movies":"Interatellar"}});
db.users.update({username:"tangseng"},{$push:{"hobby.movies":"Interatellar"}});
// 15. 删除喜欢北京的用户
db.users.remove({"hobby.cities":"beijing"});
// 16. 删除user集合
db.users.remove({});
db.users.drop();
db.users.find();
show dbs;
// 17. 向numbers中插入20000条数据
use numbers2;
db.numbers.insert({num:1});
for(var i=1; i<=200;i++){
db.numbers2.insert({num:i})
}
db.numbers2.find().count();
db.numbers2.find();
db.numbers2.drop({});
use numbers2;
var arr = [];
for(var i=1; i<= 20000; i++){
arr.push({num:i});
}
db.numbers2.insert(arr);
show dbs;
//19. 查询numbers中num为500的文档
db.numbers2.find({num:{$eq:500}})
//20查询numbers2 中num 小于30
db.numbers2.find({num:{$lt:30}});
//21 查询numbers中num大于40小于50的文档
db.numbers2.find({num:{$gt:40,$lt:5}});
//22 查询numbers中num大于1999的文档
db.numbers2.find({num:{$gt:1999}});
// 23.查询numbers2 中的前10条数据
// limit()设置数据显示的上限
db.numbers2.find().limit(10);
// 24. 查询number2 集合中第11条到20条数据
// skip() 用于跳过指定数量的数据
/* 分页 每页显示10条
1-10 0
11-20 10
21-30 20
31-40 30
skip((页码-1)*每页显示条数).limit(每页显示条数);
MongoDb 会自动调整skip和limit的位置
*/
db.numbers2.find().skip(10).limit(20);
/**
* 文档之间的关系
一对一 (one to one)
在mongoDb 可以通过内嵌文档的形式提现出一对一的关系
一对多 (one to many)
父母 - 孩子
用户 - 订单
文章 - 评论
也可以通过内嵌文档映射一对多
多对多 (many to many)
-分类 - 商品
-老师 - 学生
*/
use wifeAndHusband;
// 1.文档内嵌 一对一
db.wifeAndHusband.insert(
[{
name: "黄蓉",
husband:{
name: "郭靖",
}
},
{
name: "潘金莲",
husband:{
name:"武大郎"
}
}]
);
db.wifeAndHusband.remove({"id":"603072dd2f32244df3485e55"});
db.wifeAndHusband.drop({});
db.wifeAndHusband.find();
// 2 一对多 用户(users) 和订单(orders)
db.users.insert([{
username:"swk"
},{
username:"zbj"
}]);
db.order.insert({
list:["苹果","香蕉","大鸭梨"],
user_id:ObjectId("603077172f32244df3485e5c"),
});
db.order.insert({
list:["牛肉","漫画"],
user_id:ObjectId("603077172f32244df3485e5c"),
});
db.order.insert({
list:["西瓜","香蕉"],
user_id:ObjectId("603077172f32244df3485e5d"),
});
db.users.findOne({username:"swk"})._id;
// 查询孙悟空的订单
var user_id = db.users.findOne({username:"swk"})._id;
db.order.find({user_id:user_id});
db.users.find();
db.order.find();
// 多对多
db.teachers.insert([
{name:"洪七公"},
{name:"黄药师"},
{name:"龟仙人"},
]);
db.stu.insert([
{
name:"郭靖",
tech_ids:[
ObjectId("6030c7869d29e4c13cd004ff"),
ObjectId("6030c7869d29e4c13cd00500")
]
}
]);
// 33 为所有薪资低于1000的员工增加工资400元
// $inc 对某个值自增
db.emp.updateMany({sal:{$le:1000}},{$inc:{sal:400}});
// $inc
db.teachers.find();
db.emp.insert([
{
"empno": 7867,
"ename": "李凌",
"job": "职员",
"mgr": 7902,
"hiredate": "1987-07-01",
"sal": 700,
"deptno": 20,
"commo": 500
},
{
"empno": 7369,
"ename": "林冲",
"job": "职员",
"mgr": 7903,
"hiredate": "1987-07-01",
"sal": 600,
"deptno": 20,
"commo": 500
},
{
"empno": 7369,
"ename": "度三娘",
"job": "销售",
"mgr": 7903,
"hiredate": "1987-07-01",
"sal": 890,
"deptno": 20,
"commo": 500
},
{
"empno": 7654,
"ename": "潘金莲",
"job": "销售",
"mgr": 7903,
"hiredate": "1987-07-01",
"sal": 1100,
"deptno": 20,
"commo": 500
},
{
"empno":7934,
"ename":"鲁智深",
"job":"销售",
"mgr":7934,
"hiredate":"1987-07-01",
"sal":800,
"deptno":20,
"commo":500
},{
"empno":7900,
"ename":"武松",
"job":"销售",
"mgr":7900,
"hiredate":"1987-07-01",
"sal":800,
"deptno":20,
"commo":500
}
]);
// sort 可以任意的顺序 1 表示升序, -1 表示降序
db.emp.find({}).sort({sal:1,empno:-1});
// 查询投影,查询部分字段
db.emp.find({},{ename:1});
db.emp.insert({sal:"hello"});
db.emp.find();
use mongoose_test;
db.students.find();