文章目录- 第一章MongoDB简介
- 第二章MongoDB安装
- 第三章MongoDB基本操作
第一章MongoDB简介
MongoDB 是一个基于分布式文件存储的数据库。由 C 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。 MongoDB 官网地址:https://www.mongodb.com/ MongoDB 官方英文文档:https://docs.mongodb.com/manual/ MongoDB 各平台下载地址:https://www.mongodb.com/download-center#community
第二章MongoDB安装
###2.1 关闭SELINUX
代码语言:javascript复制vi /etc/selinux/config
对配置文件进行修改,然后按ESC键,:wq保存退出
代码语言:javascript复制#SELINUX=enforcing
#SELINUXTYPE=targeted
SELINUX=disabled #增加
:wq! #保存退出 ###2.2 配置防火墙
代码语言:javascript复制vi /etc/sysconfig/iptables
可以看到配置文件,然后按I键,insert如下数据
代码语言:javascript复制-A INPUT -m state --state NEW -m tcp -p tcp --dport 9092 -j ACCEPT
然后按ESC键,:wq保存退出,配置文件代码如:
代码语言:javascript复制# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9092 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
:wq保存退出
###2.3 下载安装Mongodb cd进入/usr/local/src
代码语言:javascript复制cd /usr/local/src
wget下载
代码语言:javascript复制wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.6.0.tgz
tar解压
代码语言:javascript复制tar zxvf mongodb-linux-x86_64-2.6.0.tgz
将解压文件移动到安装目录
代码语言:javascript复制mv mongodb-linux-x86_64-2.6.0 /usr/local/mongodb
创建mongodb存放路径
代码语言:javascript复制mkdir -p /usr/local/mongodb/data/
创建mongodb日志文件存放文件
代码语言:javascript复制mkdir /usr/local/mongodb/logs/mongodb.log
###2.4 启动mongodb
代码语言:javascript复制/usr/local/mongodb/bin/mongod --port 27017 --fork --dbpath=/usr/local/mongodb/data/ --logpath=/usr/local/mongodb/logs/mongodb.log --logappend&
检查
代码语言:javascript复制netstat -lanp | grep "27017"
进入mongodb数据库控制台
代码语言:javascript复制./mongo
设置mongodb全局
添加环境变量
代码语言:javascript复制vi /etc/profile
同样使用VI编辑器,加入如下配置
代码语言:javascript复制export PATH=$PATH:/usr/local/mongodb/bin
按ESC,然后:wq保存退出
使配置文件立即生效
代码语言:javascript复制source /etc/profile
然后就可以全局使用mongodb命令了 进入mongodb控制台
代码语言:javascript复制mongo #进入MongoDB控制台
show dbs #查看默认数据库
use admin #切换到admin数据库
exit #退出MongoDB控制台
第三章MongoDB基本操作
###3.1MongoDB连接 MongoDB连接,使用“username:password@hostname/dbname’”的形式进行连接。 连接本地数据库服务器,端口是默认的。
代码语言:javascript复制mongodb://localhost
###3.2创建数据库 MongoDB创建数据库语法
代码语言:javascript复制use DATABASE_NAME
demo:创建test数据库
代码语言:javascript复制use test
如果没有数据库,就创建数据库,否就连接到指定数据库 查看所有的数据库,使用
代码语言:javascript复制show dbs
不过这时我们使用show dbs的话,还是看不到我们创建的数据库,其实是需要我们向数据库里添加数据才可以看得到的 demo:向test数据库里插入一行数据
代码语言:javascript复制db.test.insert({"name":"test"})
###3.3创建数据库 MongoDB删除数据库语法
代码语言:javascript复制db.dropDatabase()
不过一般要先使用use连接数据库,然后再删除指导数据库 demo:删除test数据库 连接test数据库
代码语言:javascript复制use test
删除test数据库
代码语言:javascript复制db.dropDatabase()
删除集合 demo:删除test数据库的coll集合
代码语言:javascript复制> use test
switched to db runoob
> show tables
coll
> db.coll.drop()
true
> show tables
>
###3.4插入文档 MongoDB插入文档语法大致如
代码语言:javascript复制db.COLLECTION_NAME.insert(document)
demo:向test数据库的col集合中插入文档 方法一
代码语言:javascript复制>use test
>db.col.insert({title: 'MongoDB',
description: 'MongoDB NOSQL',
by: 'test',
url: 'https:',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})
查看已经写入数据的col集合
代码语言:javascript复制db.col.find()
方法二 定义一个document对象
代码语言:javascript复制document=({title: 'MongoDB',
description: 'MongoDB NOSQL',
by: 'test',
url: 'https:',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
});
执行,将定义好的document对象写入数据
代码语言:javascript复制db.col.insert(document)
###3.5更新文档 更新文档操作语法大概如:
代码语言:javascript复制db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
参数意义:
- query : update的查询条件,类似sql update查询内where后面的。
- update : update的对象和一些更新的操作符(如
inc…)等,也可以理解为sql update查询内set后面的
- upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
- multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
- writeConcern :可选,抛出异常的级别。
demo:更新test数据库的文档 使用test数据库
代码语言:javascript复制use test
更新文档操作
代码语言:javascript复制db.col.update({'title':'MongoDB'},{$set:{'title':'MongoDB test'}})
然后查看文档是否更新
代码语言:javascript复制db.col.find()
修改多条相同的文档 上诉情况是修改一条文档的,若修改多条相同的文档,则需要设置 multi 参数为 true。
代码语言:javascript复制db.col.update({'title':'MongoDB'},{$set:{'title':'MongoDB test'}},{multi:true})
save()方法 语法大概如:
代码语言:javascript复制db.collection.save(
<document>,
{
writeConcern: <document>
}
)
参数意义
- document : 文档数据。
- writeConcern :可选,抛出异常的级别。 demo:替换了 _id 为 56064f89ade2f21f36b03136 的文档数据
db.col.save({
"_id" : ObjectId("56064f89ade2f21f36b03136"),
"title" : "MongoDB",
"description": 'MongoDB NOSQL',
"by": 'test',
"url": 'https:',
"tags": ['mongodb', 'database', 'NoSQL'],
"likes": 100
})
代码语言:javascript复制只更新第一条记录:
db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );
全部更新:
db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );
只添加第一条:
db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );
全部添加加进去:
db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );
全部更新:
db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );
只更新第一条记录:
db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );
###3.6删除文档 MongoDB删除文档操作为
代码语言:javascript复制db.collection.remove(
<query>,
<justOne>
)
MongoDB2.6以后版本的操作为
代码语言:javascript复制db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)
- query :(可选)删除的文档的条件。
- justOne : (可选)如果设为 true 或 1,则只删除一个文档。
- writeConcern :(可选)抛出异常的级别。
demo:删除title为MongoDB的数据
代码语言:javascript复制db.col.remove({'title':'MongoDB'})
删除集合所有数据
代码语言:javascript复制db.col.remove({})
###3.7MongoDB查询 MongoDB查询语法
代码语言:javascript复制db.collection.find(query, projection)
- query :可选,使用查询操作符指定查询条件
- projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。 易读方式查询
db.col.find().pretty()
除了 find() 方法之外,还有一个 findOne() 方法,它只返回一个文档。
###3.8MongoDB条件操作 MongoDB AND条件,可以传入多个键(key),每个键(key)以逗号隔开
代码语言:javascript复制db.col.find({key1:value1, key2:value2}).pretty()
MongoDB OR条件
代码语言:javascript复制db.col.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
MongoDB AND和OR联合查询 AND 和 OR 联合使用,类似常规 SQL 语句为: ‘where likes>50 AND (by = ‘教程’ OR title = ‘MongoDB 教程’)’
MongoDB条件操作符
- (>) 大于 : $gt
- (<) 小于 : $lt
- (>=) 大于等于 : $gte
- (<= ) 小于等于 : $lte Demo: 获取 “col” 集合中 “likes” 大于 100 的数据,可以使用以下命令:
db.col.find({"likes" : {$gt : 100}})
获取"col"集合中 “likes” 大于等于 100 的数据,可以使用以下命令
代码语言:javascript复制db.col.find({likes : {$gte : 100}})
获取"col"集合中 “likes” 小于 150 的数据,可以使用以下命令:
代码语言:javascript复制db.col.find({likes : {$lt : 150}})
获取"col"集合中 “likes” 小于等于 150 的数据,可以使用以下命令:
代码语言:javascript复制db.col.find({likes : {$lte : 150}})
获取"col"集合中 “likes” 大于100,小于 200 的数据,可以使用以下命令:
代码语言:javascript复制db.col.find({likes : {$lt :200, $gt : 100}})
MongoDB Limit和Skip操作符 Limit操作符,Number表示读取的记录数
代码语言:javascript复制db.COLLECTION_NAME.find().limit(NUMBER)
MongoDB skip()方法 Number表示要跳过的记录数,默认从0开始
代码语言:javascript复制db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
###3.9MongoDB type操作符 MongoDB type操作符表
类型 | 数字 | 备注 |
---|---|---|
Double | 1 | |
Object | 2 | |
Array | 4 | |
Binary data | 5 | |
Undefined | 6 | 已废弃 |
Object id | 7 | |
Boolean | 8 | |
Date | 9 | |
Null | 10 | |
Regular Expression | 11 | |
JavaScript | 13 | |
Symbol | 14 | |
JavaScript (with scope) | 15 | |
32-bit integer | 16 | |
Timestamp | 17 | |
64-bit integer | 18 | |
Min key | 255 | Query with -1 |
Max key | 127 |
获取 “col” 集合中 title 为 String 的数据,可以使用以下命令:
代码语言:javascript复制db.col.find({"title" : {$type : 2}})
###3.10MongoDB排序 使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列。 这是对集合进行排序的
代码语言:javascript复制db.COLLECTION_NAME.find().sort({KEY:1})
###3.11MongoDB索引
索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构。建立索引可以提高查询速度。如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。 demo:查询col集合,“title”为索引字段,1为指定按升序创建索引,如果你想按降序来创建索引指定为-1即可。
代码语言:javascript复制db.col.ensureIndex({"title":1})
在后台创建索引
代码语言:javascript复制db.values.ensureIndex({open: 1, close: 1}, {background: true})
###3.12MongoDB聚合 MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)。 基本语法如:
代码语言:javascript复制db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
demo:通过集合计算每个作者所写的文章数,使用aggregate()计算结果如下:
代码语言:javascript复制db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])
以上实例类似sql语句:
select by_user, count(*) from mycol group by by_user
###附录 Mongodb Java demo 附录demo: 去http://mongodb.github.io/mongo-java-driver/下载相应的jar,放在libs文件夹里
pom配置
代码语言:javascript复制<!-- bson start -->
<dependency>
<groupId>org.bson</groupId>
<artifactId>bson</artifactId>
<version>3.4.2</version>
<scope>system</scope>
<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/bson-3.4.2.jar</systemPath>
</dependency>
<!-- bson end-->
<!-- mongodb driver start -->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver</artifactId>
<version>3.4.2</version>
<scope>system</scope>
<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/mongodb-driver-3.4.2.jar</systemPath>
</dependency>
<!-- mongodb driver end -->
<!-- mongodb driver core start -->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-core</artifactId>
<version>3.4.2</version>
<scope>system</scope>
<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/mongodb-driver-core-3.4.2.jar</systemPath>
</dependency>
<!-- mongodb driver core end -->
代码语言:javascript复制import com.mongodb.MongoClient;
import com.mongodb.client.MongoDatabase;
public class MongoDBJDBC{
public static void main( String args[] ){
try{
// 连接到 mongodb 服务
MongoClient mongoClient = new MongoClient( "10.10.1.1" , 27017 );
// 连接到数据库
MongoDatabase mongoDatabase = mongoClient.getDatabase("test");
System.out.println("Connect to database successfully");
mongoDatabase.createCollection("colll");
System.out.println("集合创建成功");
}catch(Exception e){
System.err.println( e.getClass().getName() ": " e.getMessage() );
}
}
}