漂流的老妖怪

导航

 

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: 倒序

 

 

 

 

posted on 2019-11-08 14:55  漂流的老妖怪  阅读(1271)  评论(0编辑  收藏  举报