MongoDB数据库使用

MongoDB是一个基于分布式文件储存的数据库,目前是世界上用的最多的非关系型数据库,也是最像关系型的非关系型数据库。
MongDB以BSON(二进制+JSON)格式进行数据存储。

1.MongoDB 下载与安装

MongoDB 官网地址
https://www.mongodb.com/
MongoDB 下载地址
https://www.mongodb.com/download-center/community
MongoDB for Windows 64-bit 适合64位Windows Server 2008 R2,Windows 7,及最新版本的Window系统。

2.MongoDB 文件

在这里插入图片描述

2.MongoDB 设置环境变量

form:https://blog.csdn.net/lxd8731247769/article/details/51201024

3.创建文件夹

在非系统盘创建文件夹:E:\zjx\lianxi\data
E:\zjx\lianxi\data\db 用于存放数据库
E:\zjx\lianxi\data\log 用于存放日志文件

4.将MongoDB安装为windows服务(重点中的重点)

当mongod.exe被关闭时,mongo.exe就无法连接到数据库了,因此每次想使用MongoDB数据库都要开启mongod.exe程序,所以比较麻烦,此时我们可以将MongoDB安装为Windows服务。

以管理员身份运行cmd,进入bin文件夹,执行下列命令:

mongod --dbpath “E:\zjx\lianxi\data\db” --logpath “E:\zjx\lianxi\data\log\MongoDB.log” --install --serviceName "MongoDB"
32位系统要加 --storageEngine mmapv1 选择mmapv1存储引擎
这里MongoDB.log就是开始建立的日志文件,–serviceName “MongoDB” 服务器命名为MongoDB

接着启动mongodb服务 >NET START MongoDB
补充:
mongodb是服务器名称
net stop mongodb 关闭服务
sc delete mongodb 卸载服务器

5.数据库基础命令

数据库 =》 集合 =》 文档

1.进入数据库管理模式

在命令行中运行 mongo 进入数据库管理模式
在数据库管理模式中只能执行数据库命令,不能执行其他命令
exit 可以退出数据库管理模式

2.常用数据库命令

a.显示所有数据库列表 show dbs
b.创建数据库命令/进入数据库命令 use + 数据库名
//如果数据库名不存在则创建数据库,如果数据库存在则进入数据库。
c.查看当前数据库 db
d.删除数据库 db.dropDatebase();

3.集合的命令

a.显示当前数据库中的所有集合 show collections
b.创建集合 db.集合名.insert({});
//通常,在创建数据时自动创建集合,不需要单独创建
c.删除集合 db.集合名.drop();

4.文档(数据)的命令(重点中的重点)

a.新增文档(数据)

db.集合名.insert({BSON数据});
db.集合名.save({BSON数据});
例如:
db.user.insert({“name”:“admin”,“password”:“123456”});
db.user.insert({“name”:“张三丰”,“age”:“1000”});
db.list.insert({“name”:“刘备”,“age”:“29”});

insert和save方法的区别:
.insert() 向集合中插入一条数据 (推荐使用)
.save() 向集合中添加一条数据,如果集合中已存在该条数据则更新

b.查看文档(数据)

db.集合名.find(); //查找当前集合中的所有数据
db.集合名.find({条件对象}); //查找当前集合中的所符合条件的数据
db.集合名.findOne(); //查找第一条数据 或 按_id查询
db.集合名.find().pertty(); //将找到的数据按格式化显示出来

c.修改文档(数据)

db.集合名.update(查找对象,修改结果)
db.集合名.update({“name”:“a1”},{“age”:10})
修改name为a1的数据中所有数据都改为{“age”:10}

db.集合名.update({“name”,“a1”},{$set:{“age”:10}})
$set 修改其中的一节
修改name为a1的数据中age的值为10

d.删除文档(数据)
db.user.remove({}) 删除user集合下所有数据
db.user.remove({“name”,“张三丰”}) 删除user集合name="张三丰"的数据

注意:由于删除和更新操作会对数据造成极大影响,所以一定要谨慎!谨慎!再谨慎!!更新和删除之前先备份!!!!

5.文档(数据)的高级命令(重点中的重点)

1.按指定条件查询
//需求:查找所有的女歌星
db.singer.find({“sex”:“女”});
//SQL:select * form singer where sex=“女”

//需求:查找所有的中国男歌手
国籍:中国
性别:男
db.singer.find({“country”:“中国”,“sex”:“男”});
//SQL:select * form singer where country=“中国” and sex=“男”

2.大于
语法:db.集合名.find({字段名,{$gt:值}})
//需求:年龄大于50岁的歌星
db.singer.find({“age”,{ $gt:50}})
//SQL:select * from singer where age>50

3.大于等于
语法:db.集合名.find({字段名,{$gte:值}})
//需求:年龄大于等于50岁的歌星
db.singer.find({“age”,{ $gte:50}})
//SQL:select * from singer where age>=50

4.小于
语法:db.集合名.find({字段名,{$lt:值}})
//需求:年龄小于30岁的歌星
db.singer.find({“age”,{ $lt:30}})
//SQL:select * from singer where age<50

5.小于等于
语法:db.集合名.find({字段名,{$lte:值}})
//需求:年龄小于等于30岁的歌星
db.singer.find({“age”,{ $lte:30}})
//SQL:select * from singer where age<=50

6.查询指定范围的数据
语法:db.集合名.find({字段名,{$gt:小值, $lt:大值}})
//需求:年龄30-40岁之间的歌星
db.singer.find({“age”,{ $gt:30, $lt:40}})
//SQL:select * from singer where age>30 and age<40
//SQL:select * from singer where age>30 and age<40

7.查询不符合条件的数据
语法:db.集合名.find({字段名,{$ne:值}})
//需求:查询外国歌手,条件为country不为“中国”
db.singer.find({“country”,{ $ne:“中国”}})
//SQL:select * from singer where age>30 and age<40

8.$ in 字句
语法:db.集合名.find({字段名,{$in:[值1,值2,值3]}})
//需求:找出刘德华 张学友 郭富城
db.singer.find({“name”,{ $in:[“刘德华”,“张学友”,“郭富城”]}})
//SQL:select * from singer where name in (‘刘德华’,‘张学友’,‘郭富城’)

9.$ size 字句
语法:db.集合名.find({字段名,{$size:数值}})
字段名所对应的必须为数组
//需求:找出有3个代表作的歌手
db.singer.find({“works”:{ $size:3}})
//SQL:不能存放数组

10.$ exists字句
语法:db.集合名.find({字段名,{$exists:true|false}})
判断字段是否存在
$exists字段存在 true返回存在的字段数据,false返回不存在字段的数据

11.$ or字句
$ or 查找多条件时,符合其中之一就找出来
语法:db.集合名.find({$or:[{“字段名1”:值},{“字段名2”:值}]})
//需求:某个娱乐公司15个人,资料都在数据库里,某个活动必须要刘德华参加,另外需要团队的全部女歌手配合演出。查询符合条件的歌手资料
db.singer.find({ $or:[{“name”:“刘德华”},{“sex”:“女”}]})
//SQL:select * from singer where name=“刘德华” or sex=“女”

12.排序
语法:db.集合名.find({}).sort({“key1”:1,“key2”:-1})
说明:1是升序,-1是降序 key1条件相同时按住key2排序
//需求:歌手按照年龄降序排序 年龄相同时按分数升序排列
db.singer.find({}).sort({“age”:-1,“score”:1})

13.限定输出 limit() skip()
.limit(数字) //限定输出数据的条数
.skip(数字) //跳过指定的数据条数
主要用于做分页
//需求:只查找年龄最大的3个人
db.singer.find({}).sort({“age”:-1}).limit(3);
//需求:查找年龄在第三第四第五的人
db.singer.find({}).sort({“age”:-1}).skip(2).limit(3)

14.模糊查询
语法:db.集合名.find({“字段名”:/值/})
//需求:查询名字中带刘的歌星
db.singer.find({“name”:/刘/}

6.mongoose的安装及使用

1.什么是mongoose?
mongose是一个基于node.js的用于操作MongoDB数据库的第三方模块

2.mongoose的安装
先安装express框架
$ npm install mongoose

3.mongoose的使用
a.链接数据库
mongoose.connect(“mongodb:127.0.0.1:27017/数据库名”,function(err){
if(err){
throw err;
}else{
console.log(“数据库链接成功”);
};
});

b.定义骨架 Schema
Schema概念:它可以理解为数据库模型骨架,可以看做工厂中的模具一样,好比一个茶杯,喝水是茶杯最终的功能,茶杯本身就像是Model,name茶杯的批量生产是需要靠工厂的模具成型的。Schema不仅定义了文档结构和使用性能,还可以扩展插件、实例方法、静态方法、符合索引、文档生命周期钩子。

Schema:一种以文件形式储存的数据库模型骨架,不具备数据库的操作能力。
Model:由Schema发布生成的模型,具有抽象属性和行为的数据库操作。
Entity:由Model创建的实体,他的操作也会影响数据库。

储存数据步骤:定义Schema(骨架)=>创建model(模型)=>Entity实例化方法。

语法:var schema = new mongoose.Schema({
字段名:类型,
字段名:类型.
})
类型:String Number Date Buffer(缓存、二进制) Boolean Mixed(混合类型) ObjectId Array(数组)
实例:var singerSchema = new mongoose.Schema({
name:String,
country:String,
age:Number
})

c.创建模型model
概述:model模型是一种根据骨架创建出来的模型,具备数据库操作能力,通常用于读取数据库数据
语法:var singerModel = mongoose.model(“模型名称”,“骨架”,“集合名称”);
模型名称和集合名称保持一致,提高稳定性
实例:var singerModel = mongoose.model(‘singer’,‘singerSchema’,‘singer’)

d.创建实体entity
概述:Entity实体是根据模型创建出一个实例,具备数据库操作的能力,通常用于写数据(新增、修改、删除)
实例:var singer = new singerModel();
singer.属性名=值;
singer.属性名=值;
singer.属性名=值;

singer.save();//将添加实例上的属性保存到数据库
singer.remove();//删除数据

7.增删改查(数据操作)

1.读取数据/查询数据
方法1:根据条件进行数据查询,可以找出多条数据
模型.find({条件},function(err,data){
//data是从数据库中读取到的数据
//find方法找出的数据一定是个数组,即使没有数据也是一个空数组
})

方法2:查找一条数据
模型.findById(‘id’,function(){
//findById找出来的数据是一个对象
})

方法3:链式调用exec(为了实现查询条件+顺序)
模型.find({}).skip().limit().exec(function(){
//data是从数据库中读取到的数据
})

2.新增数据
var list = new listModel();//按照模型创建实体
list.name=“张三”;
list.age=18;
list.save(function(err){
console.log(“新增成功!”)
});//将新增的数据保存到数据库中
注意:如果骨架中没有定义属性及类型,是不能加进数据库。

3.删除数据
思路:
第一步:先找出要删除的数据。
第二步:调用实体上的remove()方法
实例:listModel.findById(id).exec(funcition(err,data){
data.remove(function(err){
//console.log(“删除成功”);
data.remove(function (err) {
res.send("

"+id+“已删除

”)
});
})
})

4.修改数据
思路:
第一步:找出被修改的数据
第二部:将数据修改后保存回数据库

实例:listModel.findById(id).exec(funcition(err,data){
data.name=新的值;
data.age=新的值;
data.save(function (err) {
res.send(“

修改成功

”)
});
})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值