nodejs+express+mongodb边走边学边记录

MongoDB

MongoDB是开源,高性能的NoSQL数据库;支持索引、集群、复制和故障转移、各种语言的驱动程序丰富;高伸缩性;

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

  1. mongodb官网
  2. github MongoDB
  3. mongodb手册
  4. nodejs mongo驱动

安装MongoDB
点击去下载

提示:安装目录里面不要带携带中文,不要携带中文,不要携带中文在这里插入图片描述在这里插入图片描述
下载对应版本的msi文件,下载完成直接点击安装,这里有一个地方需要注意
在这里插入图片描述
这个对勾可以去掉,这个是MongoDB自带的一个可视化工具,个人觉得不怎么好用,安装过程中现下载的,如果网络稍微差一点,可能光安装个mongodb,一个小时过去了
丫,安装出问题了,围观中~~
在这里插入图片描述
直接点击Ignore(忽略),然后进入mongodb安装目录,在data文件夹下新建db目录,data下创建log目录
进入安装目录,bin目录
右键–>在此处打开powershell或命令行窗口,我的是powershell窗口点击去更改
进入命令行窗口后键入命令:

mongod -dbpath d:\'这是你安装mongoDB的文件夹,根据你自己的命名来写'\data\db

如果出问题,看截图,看消息
在这里插入图片描述
换成’./'开头就好了
在这里插入图片描述
在这里插入图片描述
注意到这里可能有的人看到这块儿没有自动结束以为这是报错,其实不是的,现在打开的这个命令行窗口不要关闭,重新进入mongo安装目录的bin目录,右键在此处运行命令行窗口,输入mongo命令,就会发现你可以进去了,并且mongo数据库的操作指令都可以用了
在这里插入图片描述
或许还有的会出现另外一个错误提示:连接失败的错误
Error: couldn’t connect to server 127.0.0.1:27017 at src/mongo/shell/mongo.js:145
exception: connect failed
不要急,还是会有解决办法的:
删除data\db\文件下面的mongo.lock文件
重启服务–>OK

我的指令去全用的./开头的,可能是因为我没有配置环境变量的事儿,先配置下环境变量再试试
环境变量简单带过吧,将mongodb安装目录的bin目录所在路径配置到系统的环境变量PATH里就行了
环境变量配置成功了,查看版本 mongo --version成功了,但是命令行启动服务出现问题了
在这里插入图片描述
以管理员方式运行命令行窗口再试试
在这里插入图片描述
还是不行,靠,惹毛我了,删除配置文件,删除MongoDB服务相关所有东西

sc delete MongoDB

手动输入试试

mongod --dbpath "D:\software\MongoDB\data\db" --logpath "D:\software\MongoDB\data\log\db.log" --install --serviceName "MongoDB"

我知道了,我的配置文件和之前输入的./mongod --dbpath那块儿已经安装好了MongoDB的服务,配置文件那块儿又用config去install,服务已经有了,再install是会冲突的,比如之前就有MongoDB服务了再安装注册MongoDB服务???,反正服务是启不动了,接下来直接暴力一点,删除MongoDB服务和之前的命令等记录直接清零,之前定义过的任何东西都给删除掉,手动键入配置,再次试了一下,OK,成功啦
在这里插入图片描述
重新进入一下验证看看是否成功了???
在这里插入图片描述
哦了,好难啊,接下来就开始操作吧
哦对了,还没找个可视化工具呢,有可视化工具会轻松一点
好像studio3T和robo3T用的人挺多的,咱也去下载一个
在这里插入图片描述
这个网站连接的有点慢啊,网站性能有待优化啊~~当然,也可能是我网速的问题,但是我网速杠杠滴啊,也许这一会儿网速卡吧-.-!!!
在这里插入图片描述
?下载mongodb的时候我的下载速度可以飙到2M,下载这个玩意儿才这么点儿,逗我玩呢一万个食草动物奔腾而过
安装好了studio3T,我选择的是shell界面,个人感觉这样对练习写SQL语句可能会有点帮助哈

简单的数据库操作

MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。
MongoDB 的库也就是集合的意思,MongoDB一般称之为集合
查看集合

show dbs 查看所有库,在这里,没有记录的库貌似是不显示的,比如test

在这里插入图片描述
创建选中集合

use book(库名) 这里没有会自动创建,但是查看是查看不出来的,因为没记录
db 查看当前所在的数据库

在这里插入图片描述
看,我已经在book里面了,但是show dbs还是没有book,因为book是个空的-.-
用可视化工具的话直接create database就行了,我就不说了

删除集合

db.dropDatabase  删除当前选中的集合,如果没有选中,则默认删除test集合

插入和简单查询

db.book.insert({}) 使用db.集合名.insert(文档)来将文档的数据写入集合中,文档的格式为JSON。而所有存储在集合中的数据都是BSON格式。BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON。
show collections 查看的是自己创建的除了系统自带的那些有记录的集合
db.book.find() 查看所有的记录数
db.getCollection('book').find({name:'Tom'}) 根据条件不同来查找数据

在这里插入图片描述
这里有一个save方法,同instert一样也是插入数据的,但是save和insert不同的是insert插入数据的时候_id如果存在会报错,而save方法插入数据的时候_id存在则会修改,save相对比较智能一点
看吧
这就是save和insert的区别,清楚明了
MongoDB支持javascript脚本
如:

for(var i=1;i<=10;i++)db.book.save({_id:i,name:'book'+i,age:20+i});

在这里插入图片描述
条件查询

查询所有:db.集合名.find() 这个用过好多次了,都看到了效果,看看其他的
多条件查询:
db.book.find({name:'book1',age:21})

在这里插入图片描述
里面的条件,类型一定要跟集合里面存储的值类型一致,否则就跟我这样,是查不出来的

db.集合.findOne(条件) 只查询第一条
db.book.find().limit(数量) 查询前几条

在这里插入图片描述

db.表名.find().skip(数量)  skip是跳过指定数量的意思

在这里插入图片描述

$gt,$lt,$gte,$lte  大于/小于/大于等于/小于等于
$ne  不等于
db.book.find({age:{$ge:25,$lt:28}})   大于25并且小于28

在这里插入图片描述

in/nin    in  和  nin   一个是在*范围,一个是不在*范围,两个相反
or   所有条件的一个集合
db.book.find({name:{$in:['book1','book2']}})
db.book.find({
    $or:[
        {age:{$lt:25}},
        {age:{$gt:28}}
    ]
})

在这里插入图片描述
在这里插入图片描述

==正则表达式查询==
db.book.find({name:/book[1-3]/i})    里边可以直接用正则表达式
使用正则匹配的方式和我们的javascript的正则匹配是一模一样的语法

在这里插入图片描述
现在向里边插入另外的数据准备做其他条件查询,现在book集合里面的数据如下:

for(var i=1;i<=10;i++) db.book.save({_id:i,name:['book'+i,'book'+(i+1),'book'+(i+2)],age:22+i})

在这里插入图片描述

all:该操作符的含义是使用多个元素来模糊匹配数组,也就是说,如果多个数组里面包含all 匹配的内容的话,那么该数组都会被匹配出来。(相当于sql中的like模糊查询)
size:该操作符的含义是 查询特定长度的数组
db.book.find({name:{$all:['book2','book3']}})
如果想查询name数组特定的位置可以用key.index语句
db.book.find({name.0:'book2'})

在这里插入图片描述
在这里插入图片描述

db.book.find({name:{$size:3}})  //查询name数组长度为3的记录
db.book.find({name:{$size:2}})  //查询name数组长度为2的记录  无

在这里插入图片描述
limit,kip,sort

limit: 该操作符是限制结果数量的含义,可以在find后使用 limit函数
skip 该操作符的含义是 跳过集合中的多少个数据,然后返回集合中剩下的数据
sort, 该操作符接收一个对象作为参数,这个对象是一组 键/值对,键对应集合中的键名,值代表排序的方向,排序的方向可以是1(升序),或者 -1(降序)。如果指定了多个键,则按照这些键被指定的顺序逐个排序
db.book.find().limit(3)    只取前3条
db.book.find().skip(3)    跳过前3条,要后面的
db.book.find().sort({age:-1})    按照age排序,-1是倒序

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

查询学完了,写个分页查询的试试

每页2条记录,按照年龄倒序排序,从第1页到第3页都看看
db.book.find().limit(2).skip(0).sort({age:-1})    第一页
db.book.find().limit(2).skip(2).sort({age:-1})    第二页
db.book.find().limit(2).skip(4).sort({age:-1})    第三页
总结出来规律没?分页查询主要用的是skip操作符,规律:limit( 每页记录数 ).skip( (第几页-1)*每页记录数 )

在这里插入图片描述

OK,MongoDB暂时告一段落,开始nodejs连接MongoDB

nodejs安装就不用说了,自个儿去官网下载然后自行安装
安装express脚手架GO
MongoDB对许多平台都提供驱动可以访问数据库,如C#、Java、Node.js等。这里以Node.js为例。

暂时先这样了,nodejs模块都不熟悉,脚手架创建出来的项目好多东西都不知道是啥,去摸索摸索再补充,先停这儿 – 2019-03-13

参考:https://www.cnblogs.com/best/p/6212807.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值