MongoDb
window 下的安装在这里就不说明了
Linux (centos 7)下的安装,配置(小编在虚拟机下安装配置使用)
下载
首先在 mongoDB下载路径 下载mongoDB下载对应的版本.
# 使用 wget 或者 curl
# 下载
wget http://downloads.mongodb.org/linux/mongodb-linux-s390x-rhel67-debugsymbols-latest.tgz
curl http://downloads.mongodb.org/linux/mongodb-linux-s390x-rhel67-debugsymbols-latest.tgz
安装
# 解压
tar xf #文件名称
# 改名
配置
# 这里的路径要写绝对路径 否则会出现各种问题
# 设置数据文件的存放目录
dapath=/home/lijie/usr/local/mongodb/mongodb3.6.3/data/db/
# 设置日志文件的存放目录及其日志文件名
logpath=/home/lijie/usr/local/mongodb/mongodb3.6.3/logs/mongodb.log
# 设置端口号(默认的端口号是 27017)
port=27017
# 设置为以守护进程的方式运行,即在后台运行
fork=true
# nohttpinterface = true
nohttpinterface=true
# idae - MongoDB config end - 2018-10-25
环境变量配置
# 具体配置方法
# 打开 /etc/profile 文件 在最后增加以下内容
vi /etc/profile
# mongodb config /softWarea/mongodb/data 解压好的 mongodb 放置位置
export MONGODB_HOME=/softWarea/mongodb/data
export PATH=$MONGODB_HOME/bin:$PATH
# 刷新环境变量
source /etc/profile
# 查看当前配置的环境变量
echo $PATH
# 或者
$PATH
参考 1:https://www.cnblogs.com/pfnie/articles/6759105.html
参考 2:https://blog.youkuaiyun.com/ctwy291314/article/details/79850904
使用Robo 3T 连接 MongoDB
直接连接可能会报错
Failed to execute "listdatabases" command.
这是因为 mongodb
没有配置用户,使用 Robo 3T 链接 MongoDB
需要创建用户;
并且,MongoDB
安装成功后只能在本地连接使用,所以需要配置用户之后才可以远程访问。
- 在命令窗口使用进入数据库
# 开启一个用户验证还是什么来着,忘记了 ./mongod --auth # 进入数据库 mongo # 随便使用一个库 use admin # 创建一个用户名密码 三个字符串根据自己喜好自定义 db.createUser({user: "admin", pwd: "admin",rolex:["root"]})
- 使用可视化工具连接数据库
ip 端口 都配置好后,选择第二项把刚才配置的用户名密码输入,链接即可
如下图:
参考资料:Robo 3T 连接MongoDB
报错:Failed to load list of database Failed to execute “listdatabases” command.
MongoDB一些简单操作
- 修改默认数据库目录,可以:
mongod --dbpath=数据存储目录路径
- 停止:
在开启服务的控制台,直接 `Ctrl + C` 即可
或者直接关闭开启服务台的控制台
- 链接数据库和退出
# 该命令默认链接本级的 MongoDB 服务
mongo
# 在链接状态输入 exit 退出链接
exit
-
基本命令
show dbs
查看显示所有数据库
db
查看当前操作的数据库
use 数据库名称
切换到制定的数据库(如果没有回新建)
插入数据db.表名.insertOne(数据(对象))
-
在 Node 中如何操作 MongoDB 数据
- 使用官方的 MongoDB 包操作
https://github.com/mongodb/node-mongodb-native
- 使用第三方 mongoose 来操作 MongoDB 数据库
- 第三方包:
mongoose
基于 MongoDB 官方的MongoDB
包再一次做了封装。- 网址: http://www.mongoosejs.com
- 第三方包:
7.1 mongoose
中文文档
- 查找,排序,查找数量
Topic.find() // 执行查找所有
.sort({'created_time': -1}) // 根据具体字段进行 降序 排序
.limit(2) // 限制查找数量
.skip(page*2) // 跳过查询的数量 page 跳转第几页 (数据量较小的情况下运行的很好,但一旦数据较大很容易出现性能瓶颈)
.exec(function(err,data){ // 查询完毕后的回调函数
res.render('index.html', {
user: req.session.user,
topics: data
})
})
格式化时期格式,使用
moment 插件 使用请看基于 Nodejs MongoDB moment 的 使用
注意:数据量较小的情况下运行的很好,但一旦数据较大很容易出现性能瓶颈
7.2 对于分页的优化问题
对于使用 skip
出现的性能问题
解决思路是使用 _id
来查询
_id
的规则点 这里 查看一些规则以及说明
这里的解决思路就是 使用 find()
和 limit()
来解决
// Page 1
db.users.find().limit(pageSize);
//Find the id of the last document in this page
last_id = 'last document _id'
// Page 2
users = db.users.find({'_id'> last_id}). limit(10);
// Update the last id with the id of the last document in this page
last_id = 'last document _id'
但是此方法还存在的问题就是如果直接跳过多页进行查找的话,就无法直接获取了,
下面说一下我自己的解决思路:
解决该问题的思路是 先查找到 分页的最后一条数据,然后 在根据此数据的 _id
来进行查找(有大佬有别的解决办法可以留下您的解决思路,在此深表感谢)
7.3 mongoose 排序问题
// 使用 sort() 方法 sort 参数有以下两种
// 正序
// sort({'key': 'abc'})
// sort({'key': '1'})
// sort('key')
// 逆序
// sort({'key': '-1'})
// sort('-key')
7.4 mongoose 使用 then()
// 每个对应的 mongoose 方法 都返回一个 Promise 实例对象 可以使用
// .then() 方法来使用其中返回的 数据
// 使用用例
await Topic.find().sort('-created_time').then(data => {
ctx.render('index', {
user: ctx.session.user,
topics: data
})
})