MongoDB 的安装使用配置以及一些处理问题的思路

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 安装成功后只能在本地连接使用,所以需要配置用户之后才可以远程访问。

  1. 在命令窗口使用进入数据库
    # 开启一个用户验证还是什么来着,忘记了
    ./mongod --auth
    # 进入数据库
    mongo
    # 随便使用一个库
    use admin
    # 创建一个用户名密码 三个字符串根据自己喜好自定义
    db.createUser({user: "admin", pwd: "admin",rolex:["root"]})
    
  2. 使用可视化工具连接数据库
    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
    })
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值