MongoDB数据库 安装与配置

下载准备

MongoDB官方下载地址
MongoDBWindows64位 4.2.3Linux 4.2.3

安装与配置(Windows版)

1、运行mongodb-win32-x86_64-2012plus-4.2.3-signed.msi进行安装(本文默认解压到了 C:\MongoDB\Server\4.2)。

安装比较容易。难点在配置文件,启动Mongodb的服务以及将MongoDB设置成Windows服务,加载配置文件在windows的“服务”中找到。
关于网上教程中普遍推荐新建一个data文件夹等等一些操作,我的看法是可有可无,因为到了我这个版本,mongodb会自己创建这些东西。当然,如果为了方便寻找数据库和日志,自己建一个也可以。

这里我就简单描述一下:
(这里我默认在 C:\MongoDB\ 里面创建文件夹了)
创建C:\MongoDB\data\log目录,用来存放日志文件;
在C:\MongoDB\data\log目录里新建mongodb.log,用来存放日志信息;
创建C:\MongoDB\data\db目录,用来存放数据库数据。


2、在C:\MongoDB\Server\4.2\data目录下创建db文件夹(因为默认安装中没有这个文件夹,但后面要用)
在C:\MongoDB\Server\4.2目录下创建mongo.config,在文件内部复制如下文本:

mongo.config view raw
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
##数据文件  此处=后对应到数据所存放的目录
dbpath=C:\MongoDB\Server\4.2\data\db

##日志文件  此处=后对应到日志文件所在路径
logpath=C:\MongoDB\Server\4.2\log\mongodb.log

##错误日志采用追加模式,配置这个选项后mongodb的日志会追加到现有的日志文件,而不是从新创建一个新文件
logappend=true 

#启用日志文件,默认启用
journal=true 

#这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false
quiet=true 

#端口号 默认为27017
port=27017

3、安装服务
管理员权限打开cmd命令行,输入如下命令安装mongodb服务:

sc create MongoDB binPath= "C:\MongoDB\Server\4.2\bin\mongod.exe --service --config=C:\MongoDB\Server\4.2\mongo.config" 

cd 进入C:\MongoDB\Server\4.2\bin文件夹,使用如下命令:

mongod --config C:\MongoDB\Server\4.2\mongo.config --install --serviceName "MongoDB"

继续在C:\MongoDB\Server\4.2\bin文件夹的目录下,使用如下命令:

mongod --logpath "C:\MongoDB\Server\4.2\log\mongodb.log" --logappend --dbpath "C:\MongoDB\Server\4.2\data\db" --serviceName "MongoDB" --install

然后在cmd里输入services.msc打开服务管理器,找到MongoDB服务,设置成自动启动,并启动。

如果启动不成功,先删除服务,使用如下命令:

sc delete MongoDB

然后再从第2步开始,重新排查各种配置项及操作


4、测试是否安装成功
进入C:\MongoDB\Server\4.2\bin文件夹下,点击mongod.exe,如果闪一下退出,说明安装正常。
然后在浏览器里访问这个地址http://localhost:27017/
如果显示了
It looks like you are trying to access MongoDB over HTTP on the native driver port.
说明服务和端口正常。


配置环境变量(可省略)

  • 如果不配置环境变量,在使用mongo命令时要先 cd 进入C:\MongoDB\Server\4.2\bin 目录才能使用命令
  • 通过配置环境变量的方式,让mongo命令在所有文件夹内都可以访问
    在系统变量中找到path,双击打开后在变量值中的末尾增加输入C:\MongoDB\Server\4.2\bin;即可
    (Win10则双击打开后点击“编辑文本”同样在变量值中的末尾增加输入)!

远程连接MongoDB数据库(Windows版)

打开bin目录中的mongod.cfg文件进行编辑,其中bindIp:127.0.0.1改为0.0.0.0 不然别的地方访问不了,
取消security的#注释符,并添加authorization:enabled
mongod.cfg
然后以管理员身份在bin目录下执行如下命令,使配置生效

mongod –config “C:\MongoDB\Server\4.2\bin\mongod.cfg” –install

然后重启MongoDB服务

关闭mongodb      net stop mongodb
开启mongodb      net start mongodb

这里设置了0.0.0.0允许远程访问,所以最好加一层验证,添加一个mongo用户进行管理。
在bin目录打开cmd输入mongo执行命令

use admin

db.createUser({
“user”:”admin”,”pwd”:”password”,
“roles”:[
{role:”userAdminAnyDatabase”, db: “admin”},
{role:”readWriteAnyDatabase”, db: “admin”}
]});

这里就添加了一个admin的用户,密码为password

另外远程访问的话,记得开启安全组和防火墙端口,可能会因为这个导致全盘皆输

关于 MongoDB用户 的命令

show dbs        查看数据库
use dbname      进入数据库
show users      查看当前数据库用户权限
创建用户
db.createUser({user:"usertest",pwd:"passtest",roles:[  {role:"clusterAdmin", db:"admin" }, {role:"readAnyDatabase",db:"admin" }, {role:"readWrite",db:"testDB" } ]})
权限详解
内建角色:
数据库用户角色:    read、readWrite;
数据库管理角色:    dbAdmin、dbOwner、userAdmin;
集群管理角色:      clusterAdmin、clusterManager、clusterMonitor、hostManager;
备份恢复角色:      backup、restore;
所有数据库角色:    readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
超级用户角色:      root;  这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
内部角色:          __system;

------------------------------------------------------------------------------------------

角色说明:
Read:                      允许用户读取指定数据库
readWrite:                 允许用户读写指定数据库
dbAdmin:                   允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:                 允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
dbOwner:                   允许在当前DB中执行任意操作
readAnyDatabase:           赋予用户所有数据库的读权限,只在admin数据库中可用
readWriteAnyDatabase:      赋予用户所有数据库的读写权限,只在admin数据库中可用
userAdminAnyDatabase:      赋予用户所有数据库管理User的权限,只在admin数据库中可用
dbAdminAnyDatabase:        赋予管理所有数据库的权限,只在admin数据库中可用
root:                      超级账号,超级权限,只在admin数据库中可用。

------------------------------------------------------------------------------------------

集群管理角色:
clusterAdmin:                 赋予管理集群的最高权限,只在admin数据库中可用
clusterManager:               赋予管理和监控集群的权限
clusterMonitor:               赋予监控集群的权限,对监控工具具有readonly的权限
hostManager:                  赋予管理Server

修改密码
方法1:db.changeUserPassword("usertest","changepass");
方法2:db.updateUser("usertest",{pwd:"changepass1"});

修改权限
db.updateUser("usertest",{roles:[ {role:"read",db:"testDB"} ]})

注:updateuser它是完全替换之前的值,如果要新增或添加roles而不是代替它 
则使用方法: db.grantRolesToUser() 和 db.revokeRolesFromUser()

------------------------------------------------------------------------------------------

修改权限
db.grantRolesToUser("usertest", [{role:"readWrite", db:"testDB"},{role:"read", db:"testDB"}])
删除权限
db.revokeRolesFromUser("usertest",[{role:"read", db:"testDB"}])

MongoDB命令

mongodb.txt view raw
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
这是mongodb的一些命令: 

mongo   
	运行mongo

以下命令要运行mongo以后才能用

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

由于mongodb的api接口方法很多,除以上命令外,其他的命令请多看官方文档

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以邮件至 qasdwasd@qq.com
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值