package cn.allen.hadoop.mongo;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import org.bson.Document;
import org.junit.Test;
import com.mongodb.MongoClient;
import com.mongodb.ServerAddress;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;
/**
* @ClassName: MongoDBShardsTest
* @company: bsoft
* @Author: Feel君
* @CreateDate: 2018年1月23日
*/
public class MongoDBShardsTest {
/**
* 获取连接
*
*/
private static MongoDatabase getMongoDBConn(String databaseName) {
List addresses = new ArrayList();
ServerAddress address1 = new ServerAddress("192.168.204.11", 20000);
ServerAddress address2 = new ServerAddress("192.168.204.12", 20000);
ServerAddress address3 = new ServerAddress("192.168.204.13", 20000);
addresses.add(address1);
addresses.add(address2);
addresses.add(address3);
/*
* //MongoCredential.createScramSha1Credential()三个参数分别为 用户名 数据库名称 密码
* MongoCredential credential = MongoCredential.createScramSha1Credential("system", "testdb", "123123".toCharArray()); List credentials = new
* ArrayList(); credentials.add(credential);
* //通过连接认证获取MongoDB连接
* MongoClient mongoClient = new MongoClient(addresses,credentials);
* //连接到数据库 MongoDatabase
* mongoDatabase = mongoClient.getDatabase("databaseName");
*/
@SuppressWarnings("resource")
MongoClient mongoClient = new MongoClient(addresses);
MongoDatabase db = mongoClient.getDatabase(databaseName);
System.out.println("Connect to database successfully");
return db;
}
/**
* 创建集合
*/
private static void createColl(String table) {
MongoDatabase mongoDatabase = getMongoDBConn("testdb");
mongoDatabase.createCollection(table);
}
/**
* 获取集合
* @return
*/
private static MongoCollection getColl(String dbName,String table) {
MongoDatabase mongoDatabase = getMongoDBConn(dbName);
MongoCollection collection = mongoDatabase.getCollection(table);
if (collection == null) {
createColl(table);
collection = mongoDatabase.getCollection(table);
}
System.out.println("集合 选择成功");
return collection;
}
/**
* 插入文档
*/
@Test
private static void addData(String dbName,String table) {
MongoCollection collection = getColl(dbName,table);
List documents = new ArrayList();
for (int i = 0; i < 100000; i++) {
String uuid = UUID.randomUUID().toString().replace("-", "");
Document document = new Document("id", uuid).
append("test1", "test1"+uuid).
append("test2", "test2"+uuid).
append("test3", "test3"+uuid);
documents.add(document);
}
// collection.insertOne(document); //插入单个文档
collection.insertMany(documents);
System.out.println("文档插入成功");
}
/**
* 检索所有文档
*/
@Test
private static void getCollData(String dbName,String table) {
MongoCollection collection = getColl(dbName,table);
//检索所有文档
/**
* 1. 获取迭代器FindIterable
* 2. 获取游标MongoCursor
* 3. 通过游标遍历检索出的文档集合
* */
FindIterable findIterable = collection.find();
MongoCursor mongoCursor = findIterable.iterator();
int num = 0;
while(mongoCursor.hasNext()){
System.out.println(mongoCursor.next());
if (num > 100000) {
System.exit(0);
}
num++;
}
}
/**
* 更新文档
*/
@Test
private static void updataData(String dbName,String table) {
MongoCollection collection = getColl(dbName,table);
//更新文档 将文档中likes=100的文档修改为likes=200
collection.updateMany(Filters.eq("id", 16475), new Document("$set",new Document("test1","给你个白眼")));
//更新一条并查看更新前的内容
// Document findOneAndUpdate = collection.findOneAndUpdate(Filters.eq("id", 16476), new Document("$set",new Document("test1","safffgf")));
// System.out.println(findOneAndUpdate.get("id").toString());
// System.out.println(findOneAndUpdate.get("test1").toString());
//检索查看结果
FindIterable findIterable = collection.find();
MongoCursor mongoCursor = findIterable.iterator();
int num = 0;
while(mongoCursor.hasNext()){
System.out.println(mongoCursor.next());
if (num > 16475) {
System.exit(0);
}
num++;
}
}
/**
* 更新文档
*/
@Test
private static void delCollData(String dbName,String table) {
MongoCollection collection = getColl(dbName,table);
//删除符合条件的第一个文档
// collection.deleteOne(Filters.eq("test1", ""));
//删除所有符合条件的文档
// collection.deleteMany (Filters.eq("test1", "testval1"));
//删除所有
collection.drop();
}
public static void main(String[] args) {
// getColl("testdb","table2");
addData("testdb2","tablehash");
// getCollData("testdb","table1");
// updataData("testdb","table2");
// delCollData("testdb","table2");
}
}