MongoDb的学习

在这里插入图片描述

一、简介:

MongoDB是一个新的和普遍使用的数据库。 它是一个基于文档的非关系数据库提供程序。
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

1、MondoDB优点:
  • MongoDB的架构较少,它是一个文档数据库,它的一个集合持有不同的文档。
  • 从一个到另一个文档的数量、内容、大小可能有差异。
  • MongoDB中单个对象的结构很清晰。
  • MongoDB中没有复杂的连接。
  • MongoDB很容易扩展。
2、MondoDB应用场景:
  • 大而复杂的数据
  • 内容管理和交付
  • 用户数据管理
  • 数据中心

MongoDB将数据存储为文档,因此被称为面向文档的数据库。

二、官网地址

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 IDDocuments 自生成的 _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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小飞技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值