Windows版本:
1. 下载:
https://www.mongodb.com/download-center/community
2. 配置安装:
a. 解压后创建分别创建文件夹用于存放数据库文件和日志文件:
创建存放数据库文件夹: D:\installUtils\mongodb_4.2.0\data\db
创建存放日志文件夹: D:\installUtils\mongodb_4.2.0\data\log,然后在log文件夹下新建一个名为 mongodb.log 的文件
如图:
b. 将 MongoDB 安装目录下的 bin 目录添加到环境变量 Path 中:
c. win+R打开cmd输入mongo -help查看是否配置成功:
d. 配置启动服务:
以管理员的身份打开cmd,输入以下代码,注意根据自己的安装路径配置
mongod --logpath "D:\installUtils\mongodb_4.2.0\data\log\mongodb.log" --logappend --dbpath "D:\installUtils\mongodb_4.2.0\data\db" --directoryperdb --install
e. 启动服务:
net start MongoDB
f. 停止服务:
net stop MongoDB
Linux版本:
1. 官网下载安装包。
在/usr/local/新建mongoDB文件夹:
mkdir mongoDB
mongodb-linux-x86_64-rhel70-4.4.4.tgz,https://www.mongodb.com/try/download/community 并将安装包复制到 "/usr/local/mongoDB/"文件夹中
或者 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.4.tgz
2. 解压文件夹
tar -zxvf mongodb-linux-x86_64-rhel70-4.4.4.tgz
重命名为:mongodb
mv mongodb-linux-x86_64-rhel70-4.4.4.tgz/ mongodb/
路径为:/usr/local/mongoDB/mongodb
3. 创建配置文件、数据文件、日志文件
在/usr/local/mongoDB/mongodb/文件夹再里创建三个文件夹:
mkdir data //用来存放数据库数据 mkdir logs //用来存放日志文件 mkdir etc //用来存放配置文件
如图:
3.1 进入到logs文件夹里创建 mongo.log文件:
touch mongo.log
3.2 再到etc文件夹里创建 mongo.conf文件:
touch mongo.conf
3.2.1 通过vi命令打开mongo.conf编辑内容:
vi mongo.conf
3.2.2 输入上面命令后,进入编辑模式,按下 i 即可输入,输入的内容为:
# 自己安装的路径 dbpath=/usr/local/mongoDB/mongodb/data # 自己安装的路径 logpath=/usr/local/mongoDB/mongodb/logs/mongo.log logappend=true journal=true quiet=true port=27017 # 端口号 fork=true bind_ip=0.0.0.0
如图:
注释掉bind_ip,并重启mongodb.(这句配置代表只能本机使用,所以需注释)
或者 bind_ip=0.0.0.0 #默认是127.0.0.1,开启远程访问
或者bind_ip_all=ture
4. 配置环境变量
vi /etc/profile
export MONGODB_HOME=/usr/local/mongoDB/mongodb
export PATH=$MONGODB_HOME/bin:$PATH
如图:
执行命令:source /etc/profile
source /etc/profile
5. 服务启动命名
切换到"/usr/local/mongoDB/mongodb/etc/"文件夹
cd /usr/local/mongoDB/mongodb/etc/
mongod -f /mongodb.conf
出现successfully表示启动成功了。
6. 访问mongoDB
/usr/local/mongoDB/mongodb/bin/mongo
7. 创建管理员用户
use admin db.createUser({user:"admin",pwd:"password",roles:["root"]})
7.1 认证登录
db.auth("admin", "password")
设置远程访问mongodb数据库
mongodb数据库启动后,默认只能在本地使用,端口为27017,那么如何设置让它可以远程访问呢?
1. 修改配置文件mongodb.conf
把 bind_ip=127.0.0.1 这一行注释掉或者是修改成 bind_ip=0.0.0.0,最好是直接注释掉,因为在centos下,使用bind_ip=0.0.0.0会报错。
注意:设置远程访问以后,密码启动auth授权访问,不然非常不安全,数据库容易被攻击,在配置文件中修改如下:
加上:auth = true
2. 在mongo数据库中新建用户名和密码:
在非授权模式下启动数据库,并使用mongo连接上数据库,例如我们要新建"zjjsxy"数据库的用户和密码,则:
use zjjsxy
db.createUser({user:"centit",pwd:"centit",roles:[{role:"readWrite",db:"zjjsxy"}]})
注意:如果要添加zjjsxy数据库的用户,请先use zjjsxy,不然即使添加成功,也连接不上。
mongodb添加用户的方法:https://docs.mongodb.com/manual/reference/method/db.createUser/index.html
mongodb内置的用户角色:https://docs.mongodb.com/manual/core/security-built-in-roles/index.html
具体角色:
Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限。
3. 重启mongodb服务
命令:
/etc/init.d/mongodb restart
3.1防火墙开放27017端口
命令:
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 27017 -j ACCEPT
注意:如果是云服务器,一般不用在系统内打开端口,只要在服务器管理界面打开端口就可以了。
4. 远程连接
要连接的IP:192.168.0.76
命令:
mongo 192.168.0.76:27017/zjjsxy -u "centit" -p "centit"
这样就可以连接到192.168.0.76的mongodb/zjjsxy的数据库了。
建议使用robo3t,mongovue,或者mongo compass等可视化工具来连接,其中官方提供的mongo compass可以直接导出csv文件。
MongoDB常用命令:
db 显示当前的数据库名称 show dbs 显示当前服务器下数据库(非空的数据库)列表 use test 如果test数据库不存在,则创建test数据库 如果test已存在,则切换到test数据库 show collections 显示当前数据库下所包含的集合(表)列表 db.users.insert({name:'zhangsha'}) 向users集合中插入数据 如果users集合存在,则直接插入数据,如果不存在,则创建users集合再插入数据 db.createCollection('products') 创建一个空集合products db.products.insert([{name:'lishi'},{name:'wangwu'}]) 一次插入多个数据 db.products.find() 查询products集合中所有的数据 db.products.find({name:'苹果手机'}) 查询stu集合中name='苹果手机'的数据 db.products.find({name:{$eq:'苹果手机'}}) 同上,$eq=>等号,建议使用上面的方式,易记,易输入 eq = equal db.products.find({price:{$gt:18}}) 查询stu集合中age>18的数据 把$gt换成如下的符号试试: $gt=>大于 great $gte=>大于等于 great equal $lt=>小于 less than $lte=>小于等于 less than equal $ne=>不等于 not equal $in=>在范围内 $nin=>不在范围内 以上几个符号格式总结为:{ field: {符号: value}} db.products.find({name:/^华为/}) 查找stu集合中name域中以“华为”字符的开头的数据 db.products.find({name:{$in:['手机1','手机2']}}) 查询stu集合中name='手机1'和name='手机2'的数据 $in=>在范围内 $nin=>不在范围内 以上两个符号格式为:{ field:{符号:[value1,value2,....]}} db.products.find({name:"华为手机",price:800}) 查找name="华为手机"并且price:800的数据 db.products.find({$or:[{name:'华为手机'},{price:{$lt:1000}}]}) 查询products集合中name='华为手机' 或者 price<1000的数据 $or=>或者 注意$or:[{},{},....] $and=>并且 格式同$or, 例:{$and:[{},{},....]} $nor=>not or 与$or相反, 格式同$or db.products.find({price:{$not:{$gt:100}}}) 查询products集合中price<=100的数据,不存在price属性的数据也会查询出来 $not=>取反 db.products.find({price:{$exists: true}}) 查询products集合中包含域名称为price的数据 db.products.find({name:{$type:2}}) 查询products集合中name属性为字符串类型的数据 db.products.find({ $where: function(){ return this.name == '华为手机' } }) 查询products集合中name='华为手机’的数据 db.products.find({ $where: function(){ return this.name.indexOf('华为手机') > -1; } }) 查询products集合中name域中包含“华为手机”字符的数据 db.products.update({name:'华为手机'},{$set:{price:2000}},{ upsert: true, multi:false }) 把products集合中name='华为手机'的那条数据,把price属性设置成2000,其它属性保留 $set是指更改的属性列表,不在列表中其他属性会被保留,如果不加此符号,其它属性会被丢弃(_id属性比较特殊,不会丢失) upsert:true如果没有符号条件的更新时,则插入一条,为false时,则不会插入, 默认是false multi:false一次只能更新一条数据,为true时,可更新多条,默认是false db.students.remove({}) 清空集合students db.products.remove({name:'abc'}) 删除products集合中name='abc'的数据,注意,即使把集合products中的所有数据都删除了 products集合仍然存在, remove()是用来删除数据的,而drop()不仅会删除数据,还会把 集合的结构给删除 db.products.drop() 把stu集合彻底从当前数据中删除,集合stu不再存在,注意与remove()的区别 db.dropDatabase() 删除当前数据库 db.users.distinct('name') 查询users集合中不重复的name属性,返回的是数组 db.stu.count({name:'zhangshan'}) 查询stu集合中name='zhangshan'的数据数量 db.stu.find().limit(5) 查询stu集合中前5条数据 db.stu.find().skip(5) 查询stu集合中跳过前5条后的数据 db.stu.find().sort({name:1}) 查询stu集合中的全部数据,并按name属性正序排列 注:1:正序 -1: 倒序