一、安装
然后配置环境变量,找到bin目录,复制路径,path下面新建,然后copy目录进去,确定即可
配置“环境变量”,目的是在命令行中直接使用,而不需要输入很长的路径进入安装目录下再进行使用了。
1、打开终端,输入mongod,启动MongoDB服务器
2、出现错误,原因:C:\目录下,没有 data\db 文件夹,解决方法:在c盘下,新建data文件夹,在data下面再新建db文件夹;因为MongoDB在Windows中默认的数据库目录是c:\data。如果在没有该目录的情况下,直接运行mongod,就会报错误
3、但是我们可以更改数据库目录
mongod --dbpath=D:\妙味课堂文件夹\190122Nodejs开发博客系统\db --port=27017
--dbpath是指定数据库存放目录
--port是指数据库端口号
4、重新输入mongod,启动MongoDB服务器,默认端口27017
5、成功启动MongoDB服务器后,再打开一个命令行窗口输入mongo,连接数据库,然后就可以进行数据库的一些操作。
show dbs:查看已经存在的数据库
db.version() :查看数据库版本
show users:显示用户
use admin :进入admin数据库,现在就可以使用这个库了(如果没有这个库,就会自动新建这个库),如果该新建的库下面没有数据,默认不显示该库
show collections:查看该数据库下所有的集合
db:查看目前在哪个数据库下,或者说目前正在使用哪个数据库
二、MongoDB与关系型数据库的区别
比如:mysql的表tables,MongoDB这里叫集合collections,集合里面的每一条数据叫做文件(document)
mongoDB是非关系型数据库,将数据存储为一个文档,数据结构由键值对组成。mongoDB文档类似于JSON对象,字段值可以包含其他文档、数组及文档数组。
一个mongoDB可以建立多个数据库
三、创建数据库,插入数据,查看数据
use user //新建数据库
db.user.insert({ "name":"xiao" }) //增加一条数据
db.user.find() // 查看所有的数据
db.user.findOne() // 显示第一条数据
db.user.update({ "name":"xiao" },{"name":"kate","age":"18"}) //修改数据
db.user.remove({ "name":"xiao" }) //删除数据
四、用js文件写mongo命令
五、批量插入
在操作数据库时要注意两个能力:
第一个是快速存储能力。
第二个是方便迅速查询能力。
注意一次插入不要超过48M,插入.zip和大图片什么的尽量用静态存储,MongoDB存储静态路径就好,这也算是一个规则。
在工作中如果在循环插入和批量插入举起不定,那就选批量插入吧,它会给我们更优的性能体验。
九、在express里面使用mongoDB
1、理解mongoose的属性、模型
2、mongoose是mongoDB的一个对象模型工具,是基于node-mongodb-native开发的mongoDB的nodejs驱动,可以在异步的环境下执行。同时它也是针对mongoDB操作的一个对象模型库,封装了mongoDB对文档的一些增删改查等常用方法,让nodejs操作mongoDB数据库变得更加容易。
如果要通过mongoose创建一个集合并对其进行增删改查,就需要用到Schema(数据属性模型)、Model、Entity
3、Schema (属性)
在Mongoose里一切都是从Schema开始的,每一个Schema都会映射到MongoDB的一个collection上。Schema定义了collection里documents的模板(或者说是框架)。一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力,仅仅只是数据库模型在程序片段中的一种表现,可以说是数据属性模型(传统意义的表结构),又或者是集合的模型骨架。基本属性类型有字符串、日期型、数值型、布尔型、null、数组、内嵌文档等。
4、model (模型)
为了使用定义好的Schema,我们需要把blogSchema转换成我们可以使用的model(其实是把Schema编译成model,所以对于Schema的一切定义都要在compile之前完成)。也就是说model才是我们可以进行操作的handle。
由Schema构造生成的模型,除了Schema定义的数据库骨架以外,还具有数据库操作的行为,类似于管理数据属性、行为的类。
这样我们就获得了一个名为Blog的model了。生成model的同时MongoDB中对应的collection也被建立了,model的名字是Blog,而collection的名字被默认是model名字的复数也就是blogs(细心的小伙伴会发现不止变复数了,而且字母全部变小写了,亲测是这样的)。【由Schema发布生成的模型,具有抽象属性和行为的数据库操作对】
person:数据库中的集合名称,当我们对其添加数据时如果person已经存在,则会保存到其目录下,如果未存在,则会创建person集合,然后再保存数据。有了model,也就有了操作数据的能力。创建一个Model模型,需要指定两点:1,集合名称;2,集合的Schema结构对象。满足这两点,就可以操作数据库啦。
5、Schema和model的理解
不同于关系型数据库,MongoDB作为文档型数据库,Scheme、model、collection、document是其中的四大元素。document是MongoDB里的基本存储单位,collection是众多同类document的集合。Schema定义了一类document的模板,让这一类document在数据库中有一个具体的构成、存储模式。而Schema仅仅是定义了Document是什么样子的,至于生成document和对document进行各种操作(增删改查)则是通过相对应的model来进行的。
需要说明的是MongoDB中实际上只有collection和document,Schema和model不过是定义和生成前二者过程中的工具而已。
6、入门案例
7、mongoose基础操作
①查询:
查询分为多种类型,如条件查询、过滤查询等。options省略或为null,则返回所有属性;options中把需要显示的属性设置为大于零的数则返回该属性,_id不指定默认返回,设置_id为0则不返回该属性,其他字段不指定,默认不返回
MPersonModel不需要new了,通过var PersonModel = db.model("person", PersonSchema);获取之后可以马上使用了。Schema对象需要new一下。
查询就是返回一个集合中文档的子集,mongoose模型提供了find、findOne和findById方法用于文档查询
findOne查询单条,当查询到一个符合条件的数据时,就会停止继续查询并返回查询结果。
②保存||增加
save是一个实例方法,使用时需要先 new Model() 来实例化
③数据更新
Model.update(查询条件,更新对象,callback) 默认更新一条文档,若想全部更新,需要加上{multi:true}
④数据删除
Model.remove(查询条件,callback)
⑤Limit()
limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。
只显示两条记录:db.student.find().limit(2).pretty() //显示student集合中前两条记录
limit()中number值为空时代表全部查出
⑥skip()
skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。
跳过前三条记录:db.student.find().pretty().skip(3)
只显示第4条记录:db.student.find().pretty().limit(1).skip(3) 或者 db.student.find().pretty().skip(3).limit(1)
⑦排序sort()
sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列。
db.COLLECTION_NAME.find().sort({KEY:1})
将Student集合中的文档按照年龄升序排列:db.student.find().sort({age:1})
【注意】skip()与limit()的前后顺序没有要求,不管怎么放置他们执行的顺序都是先sort()后skip()最后limit()
⑧count
计算数据库总数据数目
⑨⑩⑪⑫
十、使用可视化图形软件robomongo: