Windows版
MongoDB是文档数据库,存储的是以文档(集合)为单位,使用BSON(类JSON)作为其数据结构模型,其结构是面向对象{key:value}的而不是二维表,这样的数据模型,使得MongoDB能在生产环境中提供高读写的能力,吞吐量较于mysql等SQL数据库大大增强。
MongoDB易伸缩,自动故障转移。易伸缩指的是提供了分片能力,能对数据集进行分片,数据的存储压力分摊给多台服务器。自动故障转移是副本集的概念,MongoDB能检测主节点是否存活,当失活时能自动提升从节点为主节点,达到故障转移。
MongoDB数据模型因为是面向对象的,所以可以表示丰富的、有层级的数据结构,比如博客系统中能把“评论”直接怼到“文章“的文档中,而不必像myqsl一样创建三张表来描述这样的关系。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的
MongoDB随着在数据量和吞吐量方面的增长可轻松扩展,无需停机,无需更改应用程序。
MongoDB将数据存储在类似JSON的文档中,并且文档中每个json串结构可能有所不同。
MongoDB使用动态模式,这意味着您可以在不首先定义结构的情况下创建记录,例如字段或其值的类型。
一、下载:http://www.mongodb.org/downloads-center#community
二、安装:D:\Program Files\MongoDB
配置:(4.x安装data和log安装时会创建,注意要选择根目录,服务也是自动创建)
1、在D:\Program Files\MongoDB\下新建Data文件夹
2、在D:\Program Files\MongoDB\Data下新建db和log文件夹
3、在D:\Program Files\MongoDB\Data\log下新建MongoDB.log文件
三、启动MongoDB:
a、进入D:\Program Files\MongoDB\Server\3.2\bin>
输入:mongod -dbpath “D:\Program Files\MongoDB\Data\db”
作用:将mongodb的数据库文件创建到D:\Program Files\MongoDB\Data\db目录
注意:
1、注意是mongod.exe
2、此时界面会停在2017-03-26T15:19:17.135+0800 I NETWORK [initandlisten] waiting for connections on port 27017 (此时数据库就已经启动)
b、以Windows Service的方式启动MongoDB
注册MongoDB Service
mongod -dbpath “D:\Program Files\MongoDB\data\db” -logpath “D:\Program Files\MongoDB\data\log\MongoDB.log” -install -serviceName “MongoDB”(这里必须以管理员身份运行)
此时服务已经安装成功,运行
net start mongodb (开启服务,不能指定mongo.conf)
net stop mongodb (关闭服务)
删除MongoDB Service:
mongod -dbpath “E:\Work_App\MongoDB\Data\db” -logpath “E:\Work_App\MongoDB\Data\log\MongoDB.log” -remove -serviceName “MongoDB”
四、初识MongoDB:
新开[注意是新开]一个cmd窗口后,再运行mongo.exe 程序(注意没有d) ,此时前一个窗口显示:2017-03-26T15:31:10.148+0800 I NETWORK [initandlisten] connection accepted from 127.0.0.1:60408 #1 (1 connection now open)
现在就可以使用mongodb数据库了
mongo
help
show dbs (MongoDB有系统保留库:admin|local|config)
use test
show collections
db.createCollection(“foo”) (创建表foo)
db.foo.insert({‘a’:1}) (往foo表插入a,1字段值,表不存在自动创建)
db.foo.find() (查看foo表数据)
db.foo.findOne() (查询foo表第一条数据)
db.foo.find({‘a’:1}) (条件查询foo表数据)
db.foo.find().pretty() (以格式化的方式来显示所有文档)
db.foo.find({‘a’:{KaTeX parse error: Expected 'EOF', got '}' at position 7: lte:20}̲}) (小于等于20的数据…lt:30,$gt:10}}) (大于10小于30的数据)
db.foo.remove({‘a’:‘1’}) (删除某一条数据)
db.foo.remove({}) (全表删除)
db.foo.drop() (删除集合/表foo)
db.dropDatabase() (切记要先切换到要删除的数据库)
exit
五、关闭
a、ctrl+c
b、客户端:
use admin
db.shutdownServer()
c、命令行:
mongod --shutdown --dbpath /database/mongodb/data/
六、Mongodb设置密码
mongodb密码和传统数据如mysql等有些区别:
mongoDB的用户分为两种,一种是admin用户,另一种是特定数据库用户。admin用户拥有最高的权限,所有数据库db都需要设置密码,即便是一个admin用户,授权也必须在admin数据库下进行,而不能在其他数据库下进行。
mongodb设置管理用户和密码:
1.show dbs
2.use admin 进入admin数据库
3.创建管理员账户(也可以不设置管理员直接设置test数据库的账号)
db.createUser({user:"admin",pwd:"admin123",roles:[{role:"userAdminAnyDatabase",db: "admin"}]})
mongodb中的用户是基于身份role的,该管理员账户的 role是 userAdminAnyDatabase。 ‘userAdmin’代表用户管理身份,’AnyDatabase’ 代表可以管理任何数据库。
4.验证第3步用户添加是否成功
db.auth("admin", "admin123") 如果返回1,则表示成功。
exit退出系统
db.auth()方法理解为用户的验证功能
5.修改配置
linux: vi /opt/mongodb/bin/mongodb.conf
添加
auth=true
重启mongodb: mongod --config /opt/mongodb/bin/mongodb.conf
Windows创建mongod.conf(windows不支持fork属性)
dbpath=D:\Program Files\MongoDB\data\db
logpath=D:\Program Files\MongoDB\data\log\MongoDB.log
logappend=true
bind_ip=0.0.0.0 #去除绑定本机访问,4.x以上默认127.0.0.1
port=27017
master=true
auth=true
重启:mongod -f D:\mongod.conf(中间不能有中文空格,启动后进程占用)
6.进入mongodb,用第3步的 管理员账户登录,用该账户创建其他数据库管理员账号
use admin
db.auth("admin", "admin123")
7.新建你需要管理的mongodb数据的账号密码。
use test
db.createUser({user:"test",pwd:"test",roles:[{role:"dbOwner",db:"test"}]})
rote:dbOwner 代表数据库所有者角色,拥有最高该数据库最高权限。比如新建索引等
8.新建数据库读写账户
use test
db.createUser({user:"testrw",pwd:"testrw",roles:[{role:"readWrite",db:"test"}]})
该用户用于该数据的读写,只拥有读写权限。
9.现在数据的用户名和密码就建好了。
yml可以使用:mongodb://testrw:testrw@localhost/test来连接(springboot)
使用NoSQLBooster连接MongoDB:
1、没有密码可以直接点击工具栏Connect下拉框选择From URI连接
2、有密码直接点击工具类的Connect弹出对话框->Create
a、Basic选项卡输入ip、port、name
b、Authentication选择Mode为Basic,输入数据库、用户、密码
c、Default Database可以输入要连接的数据库或者不输入连接所有数据库
七、程序:
2.x:始终false?
boolean auth = db.authenticate(“testrw”, “testrw”.toCharArray());
3.x:
String url = “mongodb://testrw:testrw@127.0.0.1:27017/test?AutoConnectRetry=true”;
MongoClientURI uri = new MongoClientURI(url);
MongoClient client = new MongoClient(uri);
return client.getDB(“test”);
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.8.2</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver</artifactId>
<version>3.8.2</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>bson</artifactId>
<version>3.8.2</version>
</dependency>
SpringBoot:MongoTemplate | MongoRepository<*.class,id>
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
application.yml
spring:
data:
mongodb:
uri: mongodb://localhost:27017/test
#uri: mongodb://testrw:testrw@localhost:27017/test