MongoDB数据库使用

  • Post author:
  • Post category:其他


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(“

修改成功

”)

});

})



版权声明:本文为zhangjx1213原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。