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}})在原先的基础上加2db.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小于25db.user.find({name: /mongo/})name中含有mongodb.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大于25db.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 会直接覆盖替换掉