MongoDB 数据库

MongoDB 数据库 -- Centos

安装

前往 (官网)[https://www.mongodb.com/download-center?jmp=nav#community] 下载对应服务器版本的 MongoDB ,我用的是 CentOS 7 所以下载的是 RHEL 7 Linux 64-bit x64
我的安装目录是 /usr/local/envir 仅供参考

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.2.tgz
tar -zxvf mongodb-linux-x86_64-rhel70-4.0.2.tgz
mv mongodb-linux-x86_64-rhel70-4.0.2 mongodb
cd mongodb
mkdir data
mkdir logs
cd data
mkdir db
cd ..

配置

  1. /usr/local/envir/mongodb/bin 下新建配置
vim mongodb.conf

dbpath = /usr/local/envir/mongodb/data/db #数据文件存放目录
logpath = /usr/local/envir/mongodb/logs/mongodb.log #日志文件存放目录
port = 28018  #端口
fork = true  #以守护程序的方式启用,即在后台运行
nohttpinterface = true
auth=true
bind_ip=0.0.0.0
  1. 环境变量
vim /etc/profile 
export MONGODB_HOME=/usr/local/mongodb
export PATH=$PATH:$MONGODB_HOME/bin

保存后,source /etc/profile 重启系统配置

启动

/usr/local/envir/mongodb/bin

mongod -f mongodb.conf 或 ./mongod -f mongodb.conf

关闭

mongod -f ./mongodb.conf --shutdown  或./mongod -f ./mongodb.conf --shutdown

开启端口

firewall-cmd --zone=public --add-port=28018/tcp --permanent

查看端口
firewall-cmd --permanent --query-port=28018/tcp

重启防火墙
firewall-cmd --reload

创建用户

mongo 127.0.0.1:28018  #连接 MongoDB 28018 端口

#创建用户管理员:
use admin
db.createUser(
  {
    user: "admin",
    pwd: "xxx",
    roles: [ { role: "__system", db: "admin" } ]
  }
)
db.auth('admin','xxx')
#以用户管理员身份登录,并切换数据库,创建数据库用户:
#切换到 code 数据库
use code
#创建用户名、密码、角色
db.createUser({user:"jovi",pwd:"xxx",roles:[{role:"readWrite",db:"code"}]})

#验证mongodb数据库权限
db.auth('user','@user123456*')

参考文章

本文中关于创建管理员参考 (MongoDB——权限管理)[https://www.cnblogs.com/sheepswallow/p/4868519.html] 这位的文章

MongoDB 数据库 -- Windows

一个数据库服务器上可以存很多数据库,数据库放着表,表的每一行数据都是一条记录。
MongoDB 是非关系型数据库( postgre 也是),灵活、节约存储空间,缺点,
集合就是表,每行的数据叫做文档,文档是一个键值对( BSON
MongoDB 数据类型

配置

mongoDB 配置 服务器与客户端
创建c:\data\db 将数据库安装在这个目录下面
配置环境变量 ....\bin 加到 path

进入 mogoDBbin 目录中
>mongod --dbpath c:\data\db
创建一个服务器,数据库存在该目录下
>mongo 启动一个客户端

将数据库服务器设置为 windows 服务

data 文件夹下创建一个 log 文件夹,再在 log 文件夹下创建 MongoDB.log
进入 DOS 窗口, 在命令行中进入到 C:\data\db\bin\ 目录中,然后再输入如下命令:
mongod.exe --logpath "C:\data\logs\MongoDB.log" --logappend --dbpath "C:\data\db" --directoryperdb --serviceName MongoDB –install

设置完之后可能无法启动服务,手动无法启动: 报错代码 100
data\db\ 下找打 mongod.lock 文件,把它删除掉,我不知道这是干嘛的,所以我建议弄个文件夹备份起来,然后启动服务,如果依然无法启动,那么再找到 storage.bson 这个文件,也删除或者备份到其他文件夹中,然后再启动服务,基本上就能轻松启动了。

可以通过 dos 命令进行启动或者停止服务:
启动: net start MongoDB 停止: net stop MongoDB

数据库常用命令

主键,每条数据都有一个唯一的主键,用来作为这条数据的唯一的标识

  • show dbs 展示数据库服务器中的已有数据库
  • use name 创建切换数据库,如果有这个数据库,会切换过去,若没有新建一个数据库,但是若未在新数据库中添加数据的话,这个新建的数据库不会保存
  • db.createCollection("collName", {size: 20, capped: true, max: 100}); max 要谨慎使用,防止造成数据丢失
  • db.collName.isCapped(); 判断聚集集合是否为定容量,返回布尔值
  • db.getCollection("name") db.getCollection("user") course.user 得到指定名称的聚集集合
  • db.getCollectionNames() 得到当前数据库中的所有聚集集合
  • db.printCollectionStats() 显示当前数据库中所有聚集的状态
  • db.user.find([{name: "zhang"}]) 显示当前聚集中的文档

集合中的操作 数据库为 course ,course 内有一个聚集为 user

  • db.user.save({name: "zhang", age: 12}) 向集合中新增文档
  • db.user.insert({name: "liu", age: 13}) 向集合中新增文档
  • db.user.update({name: "zhang"}, {$set: {age: 22}}) 修改
  • db.user.update({name: "zhang"}, {$inc: {age: 2}}) 在原先的基础上加 2
  • db.user.update({name: "zhang"}, {$inc: {age: -2}, $set: {name: "shang"}}, false, true) 啊修改 ,第三个参数是 upsert ,可选,默认为 false ,如果这条数据没找到, upserttrue 会插入一条新数据, false 会不插入;第四个参数是 multi ,可选, mongodb 默认是 false ,只更新找到的第一条记录,如果这个参数为 true ,就把按条件查出来多条记录全部更新。
  • db.user.remove({age: 18}) 删除
  • 查找并修改

聚集集合查询

  • db.user.find() 查询所有记录
  • db.user.distinct("name") 查询去重后数据
  • db.user.find({age: 22}) 查询 age = 22 的数据
  • db.user.find({age: {$gt: 22}}) 查询年龄大于 22 的记录
  • db.user.find({age: {$lt: 22}}) 小于
  • db.user.find({age: {$gte: 25}}) 大于等于
  • db.user.find({age: {$lte: 25}}) 小于等于
  • db.user.find({age: {$gt: 23, $lt: 25}}) 大于 23 小于 25
  • db.user.find({name: /mongo/}) name 中含有 mongo
  • db.user.find({name: /^mongo/}) namemongo 开头
  • db.user.find({name: /mongo$/}) namemongo 结尾
  • $gt 大于 $gte 大于等于 $lt 小于 $lte 小于等于
  • db.user.find({}, {name: 1, age: 1}) 查询指定列,1 为显示, -1 为不现实
  • db.user.find({age: {$gt: 25}}, {name: 1, age: 1}) 限制条件 age 大于 25
  • db.user.find().sort({age: 1}) 升序
  • db.user.find().sort({age: -1}) 降序
  • db.user.find({name: "zhang", age: 22}) 查询 name = "zhang", age = 22 的数据
  • db.user.find().limit(5) 查询前 5 条数据
  • db.user.find().skip(10) 查询 10 条以后的数据
  • db.user.find().limit(10).skip(5) 查询在 5-15 之间的数据
  • db.user.find({$or: [{age: 22}, {age: 25}]}) or 查询,或者的意思
  • db.user.findOne() 查询第一条数据
  • db.user.find({age: {$gte: 25}}).count() 查询某个结果集的记录条数
  • db.user.find({sex: {$exists: true}}).count() 按照某列进行排序

db.user.save()db.user.insert() 的区别

在不插入带有主键数据的文档的时候,他俩的作用都是添加文档到集合中,但是当要新增的文档记录中有主键 _id 时,如果主键已存在, insert 会报错, save 会直接覆盖替换掉

标签: none

添加新评论