MongoDB:
一、简介:
MongoDB是一个新的和普遍使用的数据库。 它是一个基于文档的非关系数据库提供程序。
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
1、MondoDB优点:
- MongoDB的架构较少,它是一个文档数据库,它的一个集合持有不同的文档。
- 从一个到另一个文档的数量、内容、大小可能有差异。
- MongoDB中单个对象的结构很清晰。
- MongoDB中没有复杂的连接。
- MongoDB很容易扩展。
2、MondoDB应用场景:
- 大而复杂的数据
- 内容管理和交付
- 用户数据管理
- 数据中心
MongoDB将数据存储为文档,因此被称为面向文档的数据库。
二、官网地址
三、下载地址
四 、安装和启动
1、安装:
2、配置环境变量:
3、启动:
Win+R,然后输入services.msc,找到MongoDB的服务
五、管理工具:
1、下载地址:
2、连接MongoDB
连接成功
六、MongoDB的数据类型:
数据类型 | 描述 |
---|---|
String | 字符串。必须是UTF-8 |
Integer | 整数 |
Boolean | 布尔值,true 或者false |
Double | 浮点数 (没有float类型,所有小数都是Double) |
Array | 数组或者列表 |
Timestamp | 时间戳 |
Object | 用于内嵌文档 |
Null | 空数据类型 |
Date | 日期时间 |
Object ID | Documents 自生成的 _id |
Object ID说明:0-8字节是时间戳,9-14字节的机器标识符,15-18字节的进程id,19-24字节是计数器
五、增删改查:
?—代表官方推荐使用
1、插入:
insert()—插入一条或者多条数据:
db.stus.insert({name:"张三",age:"23",gender:"男"});
?insertOne()—插入一条:
db.stus.insertOne({name:"李四",age:"20",gender:"男"});
?insertMany()—插入多条:
db.stus.insertMany([{name:"王1",age:"47",gender:"男"},{name:"王2",age:"50",gender:"女"}]);
自定义Id:
db.stus.insertOne({_id:"自定义Id",name:"王3",age:"17",gender:"男"});
2、查询:
find()—无条件查询
db.stus.find();
find({字段名:值})—条件查询
db.stus.find({_id:"自定义Id"});
findOne()----无条件查找一条数据
db.stus.findOne();
count()----统计数量
db.stus.find().count();
3、修改:
update(查询条件,新对象)----根据条件修改该条数据的内容
db.stus.update({name:"王3"},{$set:{age:"20"}});
通过Id修改
db.stus.update(
{"_id":ObjectId("5d58ef94887c4b08006e49cb")},
{$set:{
name:"王1",
gender:"女"
}}
);
通过Id删除某一些属性
db.stus.update(
{"_id":"自定义Id"},
{$unset:{
gender:1
}}
);
updateOne()—根据条件修改一条数据的内容,如出现多条,只修改最高前的数据
updateMany()—根据条件修改全部内容
4、删除:
remove()----删除所有数据
db.stus.remove();
remove(查询条件)----根据条件删除该条数据的内容
db.stus.remove({name:"王2"});
六、$关键字 及 $修改器:
1. 查询中常见的 $lt $gt $lte $gte
等于:
db.stus.find({name:"王1"});
大于:
db.stus.find({"age":{$gt:"30"}});
小于:
db.stus.find({"age":{$lt:"30"}});
大于等于:
db.stus.find({"age":{$gte:"20"}});
小于等于:
db.stus.find({"age":{$lte:"20"}});
查询age小于20或大于30的:
db.stus.find({$or:[{age:{$lt:"20"}},{age:{$gt:"30"}}]});
2. 分页
limit()—需要显示的条数
db.stus.find().limit(2);
skip()—需要跳过的条数
db.stus.find().skip(1);
skip(页面-1 * 每页显示的条数).limit(每页显示的条数)
db.stus.find().skip(2).limit(3);
3. 插入10000条数据
第一种方法----用时:3.6s:
for(var i=1; i<=20000; i++){
db.users.insert({num:i});
}
第二种方法----用时:0.3s:
var arr = [];
for(var i=1; i<=10000; i++){
arr.push({num:i});
}
db.users.insert(arr);
4. 排序
sort() 指定文档排序 1:升序 -1:降序
db.stus.find().sort({age:-1}).limit(10);
5. 投影
db.users.find({},{需要显示的字段:1,需要隐藏的字段:0})
db.stus.find({},{age:1,_id:0}).limit(10);
七、文档之间的关系:
1、一对一
db.wifeAndHusband.insert([
{
name:"黄蓉",
husband:{
name:"郭靖"
}
},{
name:"潘金莲",
husband:{
name:"武太郎"
}
}
]);
2、一对多
// 会员
db.member.insert([
{
username:"xf1"
},
{
username:"xf2"
}
]);
// 订单
db.order.insert({
list:["西瓜","梨"],
mer_id:ObjectId("5d5800ab1691883b522feafa")
});
// 根据用户查询xf1的订单
var user_id = db.member.findOne({username:"xf2"})._id;
db.order.find({mer_id:user_id});
3、多对多
// 教师
db.teachers.insert([
{name:"li1"},
{name:"li2"},
{name:"li3"}
]);
// 学生
db.stus.insert([
{
name:"xf1",
teach_ids:[
ObjectId("5d58052a1691883b522feafd"),
ObjectId("5d58052a1691883b522feaff")
]
},{
name:"xf2",
teach_ids:[
ObjectId("5d58052a1691883b522feafd"),
ObjectId("5d58052a1691883b522feafe"),
ObjectId("5d58052a1691883b522feaff")
]
}
]);
QQ群:470765097