java 操作MongoDB API
一、获取Mongo的连接
1、数据库没有用户名和密码
//依次是mongo的主机地址、端口号、数据库名称
public static MongoDatabase getMongoDB(String host, int port, String dataBase){
MongoClient mongoClient = new MongoClient(host, port);
MongoDatabase database = mongoClient.getDatabase(dataBase);
return database;
}
2、数据库有用户名和密码
//依次是IP:端口、数据库名称、用户名、密码
public static MongoDatabase getMongoDByCredent(String url_port, String database, String username, String password){
List<ServerAddress> serverAddList = new ArrayList<>();
ServerAddress serverAddress = new ServerAddress(url_port);
serverAddList.add(serverAddress);
List<MongoCredential> credentialList = new ArrayList<>();
MongoCredential credential = MongoCredential.createCredential(username, database, password.toCharArray());
credentialList.add(credential);
MongoClient mongoClient = new MongoClient(serverAddList,credentialList);
return mongoClient.getDatabase(database);
}
二、mongo的增删改查
1、插入文档
public static void insertDocument(MongoDatabase database){
MongoCollection collection = database.getCollection("表名");
List<Document> documentList = new ArrayList<>();
documentList.add(Document.parse("{\"uname\":\"aaaa\",\"data\":{\"patient_info\":{\"INFO\":{\"GENDER\":{\"value\":\"female\"}}}}}"));
documentList.add(Document.parse("{\"uname\":\"bbb\",\"data\":{\"patient_info\":{\"INFO\":{\"GENDER\":{\"value\":\"female\"}}}}}"));
collection.insertMany(documentList);
}
2、删除文档
(1)删除整个文档
public static void deleteDocument(MongoDatabase database){
MongoCollection<Document> collection = database.getCollection("表名");
BasicDBObject query = new BasicDBObject();
query.put("caseID","49b5afb1-4026-4aad-8c93-af83e38a074a15d0739363f");
//DeleteResult deleteResult = collection.deleteMany(query);//删除文档
//System.out.println("共删除:"+deleteResult.getDeletedCount());
Document oneAndDelete = collection.findOneAndDelete(query);//删除并返回文档
ResultBean resultBean = gson.fromJson(oneAndDelete.toJson(), ResultBean.class);
System.out.println("删除的文当为:"+gson.toJson(resultBean));
}
(2)删除文档中的某个字段
思路:查询出需要删除字段的文档,将这些文档中的字段删除,得到新的文档,再删除旧文档插入新文档
public static void deleteKeyValue(MongoDatabase mongoDatabase){
MongoCollection<Document> collection = mongoDatabase.getCollection("表名");
List<Document> documentList = new ArrayList<Document>();
BasicDBObject query = new BasicDBObject();
query.put("data.patient_info.INFO.GENDER.value","female");
FindIterable<Document> documents = collection.find(query);
MongoCursor<Document> iterator = documents.iterator();
while(iterator.hasNext()){
Document next = iterator.next();
//变成jsonObject去除指定字段
ResultBean resultBean = gson.fromJson(next.toJson(), ResultBean.class);
JsonObject jsonObject = new JsonParser().parse(gson.toJson(resultBean)).getAsJsonObject();
jsonObject.remove("uname");
//将jsonObject转化为Document
Document newDocument = Document.parse(gson.toJson(jsonObject));
documentList.add(newDocument);
}
collection.deleteMany(query);
collection.insertMany(documentList);
}
3、修改文档
(1)更新文档中的字段信息
public static void updataKeyValue(MongoDatabase database){
MongoCollection<Document> collection = database.getCollection("表名");
//查询条件
BasicDBObject query = new BasicDBObject();
query.put("data.patient_info.INFO.GENDER.value","男");
//更新数据
BasicDBObject newDocument = new BasicDBObject("$set",new BasicDBObject("data.patient_info.INFO.GENDER.value","male"));
UpdateResult updateResult = collection.updateMany(query,newDocument);
System.out.println("共修改:"+updateResult.getModifiedCount()+"\n------------修改后的数据信息为--------------");
//结果映射
BasicDBObject result = new BasicDBObject();
result.put("uname",1);
result.put("data.patient_info.INFO.GENDER.value",1);
FindIterable<Document> documents = collection.find().projection(result);
//展示结果
MongoCursor<Document> iterator = documents.iterator();
while (iterator.hasNext()){
Document doc = iterator.next();
ResultBean resultBean = gson.fromJson(doc.toJson(), ResultBean.class);
System.out.println(gson.toJson(resultBean));
}
}
(2)更新文档
public static void updateAllDocument(MongoDatabase database){
MongoCollection<Document> collection = database.getCollection("表名");
BasicDBObject query = new BasicDBObject();
query.put("caseID","49b5afb1-4026-4aad-8c93-af83e38a074a15d0739363f");
String jsonStr = "{\"a\":{\"b\":{\"c\":{\"d\":\"e\"}}}}";
BasicDBObject newDocumnt = BasicDBObject.parse(jsonStr);
BasicDBObject updateObj = new BasicDBObject();
updateObj.put("$set",new BasicDBObject("data",newDocumnt));
UpdateResult updateResult = collection.updateOne(query, updateObj);
System.out.println("共修改:"+updateResult.getModifiedCount());
}
4、查询文档
public static void findDocuments(MongoDatabase database){
MongoCollection<Document> collection = database.getCollection("表名");
BasicDBObject query = new BasicDBObject();
query.put("data.patient_info.INFO.GENDER.value","男");
FindIterable<Document> documents = collection.find(query);
//遍历结果集
MongoCursor<Document> iterator = documents.iterator();
while(iterator.hasNext()){
Document doc = iterator.next();
//按照指定类的格式生成结果,去掉多余字段,注意:类的属性应与json键值保持一致
ResultBean resultBean = gson.fromJson(doc.toJson(), ResultBean.class);
JsonObject jsonObject = new JsonParser().parse(gson.toJson(resultBean)).getAsJsonObject();
jsonObject.addProperty("code",1);
System.out.println(gson.toJson(jsonObject));
}
}
ResultBean:
public class ResultBean {
//属性名与json的key值必须一致
private String crf_id;
private String caseID;
private String createTime;
private String status;
private String uname;
private Object data;
//setter and getter 方法
}