您的位置:首页 > 数据库 > Mongodb

(1)MongoDB的Java应用

2016-03-28 13:16 477 查看
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

关于MongoDB的学习,大家可以参考http://www.runoob.com/mongodb/mongodb-tutorial.html这个网站上的教程。

下面是我写的一个基础的应用Mongodb数据库的Java工具类:

import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
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.MongoIterable;
import com.mongodb.client.model.CreateCollectionOptions;
import com.mongodb.client.model.Filters;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.bson.Document;
import org.bson.conversions.Bson;

/**
*
* @author Angela
*/
public class MongoDBUtil {

public static void main(String args[]){
MongoClient client=connect();
//listDatabase(client);//
MongoDatabase db =getDatabase(client,"mycol");
//createCappedCollection(db,"p",10);
MongoCollection<Document> collection=getCollection(db,"test");
//dropCollection(collection);
//listCollection(db);
//select(collection,"likes",200);
//update(collection,"likes",200,100,false);
//delete(collection,"likes",100,false);
Map<String,Object> map1=new HashMap<String,Object>();
map1.put("title","MonogD");
List<Integer> list=new ArrayList<Integer>();
for(int i=0;i<5;i++){
list.add(i);
}
Map<String,Object> map2=new HashMap<String,Object>();
map2.put("title",list);
List<Map<String,Object>> maps=new ArrayList<Map<String,Object>>();
maps.add(map1);
maps.add(map2);
insert(collection,maps);
select(collection);
close(client);
}

/**本地连接mongodb服务器**/
public static MongoClient connect(){
MongoClient client = new MongoClient( "localhost" , 27017 );
System.out.println("成功连接到MongoDB服务器");
return client;
}

/**远程连接mongodb服务器,带用户名和密码认证**/
public static MongoClient connect(String IP,String userName,
String dbName,String password){
//ServerAddress()两个参数分别为 服务器地址 和 端口
ServerAddress serverAddress = new ServerAddress(IP,27017);
List<ServerAddress> addrs = new ArrayList<ServerAddress>();
addrs.add(serverAddress);

//MongoCredential.createScramSha1Credential()三个参数分别为 用户名 数据库名称 密码
MongoCredential credential = MongoCredential.createScramSha1Credential(
userName, dbName, password.toCharArray());
List<MongoCredential> credentials = new ArrayList<MongoCredential>();
credentials.add(credential);

//通过连接认证获取MongoDB连接
MongoClient client = new MongoClient(addrs,credentials);
System.out.println("成功连接到MongoDB服务器");
return client;
}

/**连接到数据库**/
public static MongoDatabase getDatabase(MongoClient client,String dbName){
//连接数据库,你需要指定数据库名称,
//如果指定的数据库不存在,mongo会自动创建数据库。
MongoDatabase db = client.getDatabase(dbName);
System.out.println("成功连接到 "+dbName+" 数据库");
return db;
}

/**删除数据库**/
public static void dropDatabase(MongoClient client,String dbName){
client.dropDatabase(dbName);
System.out.println("成功删除了 "+dbName+" 数据库");
}

/**查看服务器内有多少个数据库**/
public static void listDatabase(MongoClient client){
MongoIterable<String> dbNames=client.listDatabaseNames();
int count=0;
System.out.println("服务器中有");
for(String dbName: dbNames){
System.out.println(dbName);
count++;
}
System.out.println("共"+count+"个数据库");
}

/**在db数据库上创建集合**/
public static void createCollection(MongoDatabase db,String collectionName){
//使用 com.mongodb.client.MongoDatabase 类中的createCollection()来创建集合
db.createCollection(collectionName);
System.out.println(collectionName+"集合创建成功");
}

/**
* 创建固定集合
* @param db 数据库
* @param collectionName 集合名
* @param sizeInBytes 集合字节大小,一般为10000
*/
public static void createCappedCollection(MongoDatabase db,
String collectionName,long sizeInBytes){
//使用 com.mongodb.client.MongoDatabase 类中的
//createCollection(String collectionName,CreateCollectionOptions cco)来创建集合
CreateCollectionOptions options=new CreateCollectionOptions();
options=options.capped(true);   //设置为固定集合
options=options.sizeInBytes(sizeInBytes); //设置集合的字节大小
db.createCollection(collectionName,options);
System.out.println(collectionName+"固定集合创建成功");
}

/**
* 创建固定集合
* @param db 数据库
* @param collectionName 集合名
* @param sizeInBytes 集合字节大小,一般为10000
* @param maxDocuments 集合中文档的个数
*/
public static void createCappedCollection(MongoDatabase db,
String collectionName,long sizeInBytes,long maxDocuments){
//使用 com.mongodb.client.MongoDatabase 类中的
//createCollection(String collectionName,CreateCollectionOptions cco)来创建集合
CreateCollectionOptions options=new CreateCollectionOptions();
options.capped(true);//设置为固定集合
options=options.sizeInBytes(sizeInBytes); //设置集合的字节大小
options.maxDocuments(maxDocuments); //设置文档个数
db.createCollection(collectionName);
System.out.println(collectionName+"固定集合创建成功");
}

/**获取db数据库的collectionName集合**/
public static MongoCollection<Document> getCollection(
MongoDatabase db,String collectionName){
//使用com.mongodb.client.MongoDatabase类的 getCollection() 方法来获取一个集合
MongoCollection<Document> collection = db.getCollection(collectionName);
System.out.println("集合 "+collectionName+" 选择成功");
return collection;
}

/**列举db中的集合**/
public static void listCollection(MongoDatabase db){
MongoIterable<String> collectionNames=db.listCollectionNames();
int count=0;
System.out.println(db+"数据库中有");
for(String collectionName: collectionNames){
System.out.println(collectionName);
count++;
}
System.out.println("共"+count+"个集合");
}

/**删除集合**/
public static void dropCollection(MongoCollection<Document> collection){
collection.drop();
System.out.println(collection.getNamespace().getCollectionName()
+"集合删除成功");
}

/**插入一个文档**/
public static void insert(MongoCollection<Document> collection,
Map<String,Object> map){
//创建文档 org.bson.Document 参数为key-value的格式
Document document=new Document(map);
//使用com.mongodb.client.MongoCollection类的
//insertOne(Document) 方法来插入一个文档
collection.insertOne(document);
System.out.println("文档插入成功");
}

/**插入多个文档**/
public static void insert(MongoCollection<Document> collection,
List<Map<String,Object>> maps){
List<Document> documents = new ArrayList<Document>();
for(Map<String,Object> map: maps){
//1. 创建文档 org.bson.Document 参数为key-value的格式
Document document=new Document(map);
//2. 创建文档集合List<Document>
documents.add(document);
}
// 3. 使用com.mongodb.client.MongoCollection类的
//insertMany(List<Document>) 方法来插入多个文档
collection.insertMany(documents);
System.out.println("文档插入成功");
}

/**删除成功**/
public static void delete(MongoCollection<Document> collection,
String fieldName,Object value,boolean isAll){
if(isAll){
//删除所有符合条件的文档
collection.deleteMany(Filters.eq(fieldName, value));
}else{
//删除符合条件的第一个文档
collection.deleteOne(Filters.eq(fieldName, value));
}
System.out.println("文档删除成功");
}

/**查看所有文档**/
public static void select(MongoCollection<Document> collection){
//使用 com.mongodb.client.MongoCollection 类中的 find() 方法来获取集合中的所有文档。
//此方法返回一个游标,所以你需要遍历这个游标。
//检索所有文档
/**
* 1. 获取迭代器FindIterable<Document>
* 2. 获取游标MongoCursor<Document>
* 3. 通过游标遍历检索出的文档集合
* */
FindIterable<Document> findIterable = collection.find();
MongoCursor<Document> mongoCursor = findIterable.iterator();
while(mongoCursor.hasNext()){
System.out.println(mongoCursor.next());
}
}

/**查看符合查找条件的所有文档**/
public static void select(MongoCollection<Document> collection,
String fieldName,Object value){
Bson bson=Filters.eq(fieldName, value);
FindIterable<Document> findIterable = collection.find(bson);
MongoCursor<Document> mongoCursor = findIterable.iterator();
while(mongoCursor.hasNext()){
System.out.println(mongoCursor.next());
}
}

/**更新文档**/
public static void update(MongoCollection<Document> collection,
String fieldName,Object oldValue,Object newValue,boolean isAll){
if(isAll){
//使用 com.mongodb.client.MongoCollection 类中的 updateMany() 方法来更新集合中的文档。
collection.updateMany(Filters.eq(fieldName, oldValue), new Document(
"$set",new Document(fieldName,newValue)));
} else{
collection.updateOne(Filters.eq(fieldName, oldValue), new Document(
"$set",new Document(fieldName,newValue)));
}
System.out.println("文档更新成功");
}

/**关闭mongodb连接**/
public static void close(MongoClient client){
client.close();
System.out.println("成功关闭连接!");
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: