MongoDB 安装与卸载和java Api
一、安装
1、配置yum管理包
1)、在路径/etc/yum.repos.d/下创建文件mongodb-org-3.4.repo
cd /etc/yum.repos.d/
touch mongodb-org-3.4.repo
2)、在文件mongodb-org-3.4.repo中写入如下内容
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enable=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
2、安装mongodb(会安装mongodb-org包及其依赖包mongodb-org-server、mongodb-org-mongos、mongodb-org-shell、mongodb-org-tools)
数据库实例默认在/var/lib/mongo路径下,日志默认在/var/log/mongodb路径下,也可以通过修改/etc/mongod.conf文件的storage.dbPath和systemLog.path配置
yum install -y mongodb-org
3、修改配置文件
vim /etc/mongod.conf 修改的新路径需要赋值权限 chmod 777 -R 修改后的路径(chown -R mongod:mongod /某某)
设置ip地址与端口和数据保存目录与日志目录
4、开启mongodb服务
service mongod start
5、通过查看日志方式,验证服务开启成功,其中有一行为:[thread1] waiting for connections on port 27017
cat /var/log/mongodb/mongod.log
6、设置开机启动
chkconfig mongod on
7、停止mongodb服务
service mongod stop
8、重启mongodb服务
service mongod restart
二、卸载
1、停止服务
service mongod stop
2、删除安装的包
yum erase $(rpm -qa | grep mongodb-org)
3、删除数据及日志
rm -r /var/log/mongodb
rm -r /var/lib/mongo
三、java Api
pom.xml
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver</artifactId>
<version>3.4.2</version>
</dependency>
基础操作代码:
import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.*;
import org.bson.Document;
import java.text.SimpleDateFormat;
import java.util.*;
import static com.mongodb.client.model.Filters.*;
public class MongoDbJdbc {
/**
* 获取连接
*
* @param url
* @param port
* @return
*/
public static MongoClient init(String url, int port) {
MongoClient mongoClient = new MongoClient(url, port);
return mongoClient;
}
/**
* 获取数据库
*
* @param mongoClient 客户端连接
* @param dbName 数据库名称
* @return
*/
public static MongoDatabase getDatabase(MongoClient mongoClient, String dbName) {
MongoDatabase database = mongoClient.getDatabase(dbName);
return database;
}
/**
* 获取DB集合
*
* @param database 数据库
* @param collectionName 集合名称
* @return
*/
public static MongoCollection<Document> getCollection(MongoDatabase database, String collectionName) {
MongoCollection<Document> collection = database.getCollection(collectionName);
return collection;
}
/**
* 创建集合
*
* @param database
* @param collectionName
*/
public static void createCollection(MongoDatabase database, String collectionName) {
try {
database.createCollection(collectionName);
} catch (Exception e) {
System.out.println("集合已经存在");
}
}
/**
* 删除集合
*/
public static void delectCollection(MongoCollection<Document> collection) {
collection.drop();
}
/**
* 单条插入到集合
*
* @param data 数据
* @param collection db库集合
*/
public static void insertLine(HashMap<String, Object> data, MongoCollection<Document> collection) {
Document document = new Document();
for (Map.Entry<String, Object> entry : document.entrySet()) {
document.append(entry.getKey(), entry.getValue());
}
collection.insertOne(document);
}
/**
* 批量插入到集合
*
* @param collection db库集合
* @param max 数据集
*/
public static void insertBatch(MongoCollection<Document> collection, int max) {
List<Document> documents = new ArrayList<>();
for (int i = 0; i < max; i++) {
Document document = new Document();
document.append("_id", i);
document.append("t", simpleDate.format(new Date()));
document.append("v", Math.round(Math.random() * 100) / 10.0);
documents.add(document);
}
collection.insertMany(documents);
}
/**
* 根据索引id更新数据
*
* @param collection
* @param id
* @param data
*/
public static void updateLine(MongoCollection<Document> collection, String id, Map<String, Object> data) {
Document document = new Document();
for (Map.Entry<String, Object> entry : document.entrySet()) {
document.append(entry.getKey(), entry.getValue());
}//主键查找
collection.updateMany(eq("_id", id), new Document("$set", document));
}
/**
* 批量更新
*
* @param collection 集合对象
* @param sum <id,map<key,value>>
*/
public static void updateBatch(MongoCollection<Document> collection, int sum) {
List<WriteModel<Document>> writeModelList = new ArrayList<>();
for (int i = 0; i < sum; i++) {
Document updateDocument = new Document();
Document document = new Document();
document.append("t", simpleDate.format(new Date()));
document.append("v", Math.round(Math.random() * 100) / 10.0);
updateDocument.append("$set", document);//更新
UpdateOneModel<Document> updateOneModel = new UpdateOneModel<>(Filters.eq("_id", i), updateDocument);
writeModelList.add(updateOneModel);
}
collection.bulkWrite(writeModelList, new BulkWriteOptions().ordered(true));
}
public static SimpleDateFormat simpleDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}
参数解释:
$group:分组聚合
$sort:根据分组聚合后的count做倒序
$match:对分组聚合后的结果做查询筛选
$skip:分页跳过条数
$limit:返回多少条数据
allowDiskUse:true 允许使用磁盘缓存,默认为false
$group:分组聚合中参数(这里面的参数可以根据需要构建返回的字段)
_id:根据heapNum字段做groupby分组
publishDate:使用$max获取同组成员中,日期最大最新的那个
heapNum:使用$first获取同组成员中,第一条数据的heapNum
count:使用$sum统计同组成员数量
注意,这里的$match并不是只能出现在这里,可以出现2次,在$group之前出现的,是先做查询,再对查询的数据做分组,出现在$group之后,是对分组后的结果做筛选。
用到的一些参数api:https://docs.mongodb.com/v3.4/reference/operator/aggregation/
查询与删除集合数据的api,集合类似于mysql中的表:
public static void main(String[] args) {
//参数定义
String utl = "192.168.0.1"; //MongoDB的ip地址
int port = 27017; //MongoDB的端口
String databaseName = "database"; /数据库名称
String collectionName = "test"; //集合名称
//获取资源对象
MongoClient mongoClient = new MongoClient(utl, port); //获取MongoDB客户端连接
MongoDatabase db = mongoClient.getDatabase(databaseName); //获取数据库
MongoCollection<Document> collection = db.getCollection(collectionName); //获取集合
List<Bson> aggregateList = new ArrayList<Bson>();
//创建过滤器
//删除所有符合条件的数据,Filters的方法有,gt表示大于,lt表示小于 gte,lte表示大于等于,小于等于
Bson filter = Filters.and(//and表示两个都需要满足
Filters.gte("data_time", "2019-10-24 10:36:04"),//字段data_time大于2019-10-24 10:36:04
Filters.lte("data_time", "2019-10-24 10:36:06")//字段值小于
);
//多条件查询
Bson match = Aggregates.match(
Filters.and(
Filters.eq("code", "xxxx"), //必须等于
Filters.regex("name", "^.*" + xxx+ ".*$"), //模糊查询
Filters.gte("start_time", "2019-10-24 10:36:04"), //大于等于
Filters.lte("end_time", "2019-10-24 10:36:06") //小于等于
)
)
多条件分组
Bson group = Aggregates.group(
new BasicDBObject("_id","$_id") //必须有id
.append("code", "$code") //逗号前面的code和$code 必须和数据库中字段的一致
.append("name", "$name") //需要分组的字段依次追加即可
);
//严格按照顺序查询
aggregateList.add(match);//1.条件过滤
aggregateList.add(group);//2.分组
aggregateList.add("limit",10);//行数
aggregateList.add("skin",1);//页码
aggregateList.add(“time,-1”);//按时间倒序排
//将过滤器作为条件,查找符合条件的数据文档
AggregateIterable<Document> aggregate = collection.aggregate(aggregateList).allowDiskUse(true);
MongoCursor<Document> cursor = aggregate.iterator();
while(cursor.hasNext()) {
Document document = cursor.next();
logger.info("查询结果:"+document.toJson()); //输出结果
}
//删除符合过滤器条件的数据
collection.deleteMany(filter);
mongoClient.close();//关闭MongoDB的连接,释放资源
}
MongoDB创建索引:
/**
* 创建索引
*/
List<BasicDBObject> bsons = new ArrayList<BasicDBObject>();
bsons.add(new BasicDBObject().append("data_time", 1));//1升序,-1降序
for (BasicDBObject bson : bsons) {
collection.createIndex(bson);
}