MongoDB 数据库在 Windows 和 CentOS 上
前往 (官网)[https://www.mongodb.com/download-center?jmp=nav#community] 下载对应服务器版本的 MongoDB ,我用的是 CentOS 7 所以下载的是 RHEL 7 Linux 64-bit x64
我的安装目录是 /usr/local/envir
仅供参考
MongoDB
数据库 -- Centos
安装
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 ..
配置
- 在
/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
- 环境变量
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
中
进入 mogoDB
的 bin
目录中 >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
,如果这条数据没找到,upsert
为true
会插入一条新数据,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/})
name
以mongo
开头db.user.find({name: /mongo$/})
name
以mongo
结尾$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
会直接覆盖替换掉