(1)获取数据库对象:
//获取数据库对象
MongoDatabase mongoDatabase = mongoClient.getDatabase("lsy_test");
(2)获取集合对象:
//获取集合对象
MongoCollection<Document> mongoCollection = mongoDatabase.getCollection("test_user");
(3)增加单条数据:
Document中有一个自己唯一字段_id,默认为ObjectId类型,也可以自定义_id的类型,只要保证唯一即可,比如:UUID等。
/**
* 增加单条数据
* @param mongoCollection
*/
public void addOneDocument(MongoCollection<Document> mongoCollection){
Document document = new Document();
document.append("user_name","test");
document.append("pwd","0000000000");
document.append("phone","000000000000");
document.append("_id",UUID.randomUUID().toString());
mongoCollection.insertOne(document);
}
(4)增加多条数据:
Document中有一个自己唯一字段_id,默认为ObjectId类型,也可以自定义_id的类型,只要保证唯一即可,比如:UUID等。
/**
* 增加多条数据
* @param mongoCollection
*/
public void addMultipleDocument(MongoCollection<Document> mongoCollection){
Document documentOne = new Document();
documentOne.append("user_name","test_01");
documentOne.append("pwd","1111111");
documentOne.append("phone","1111111");
documentOne.append("_id",UUID.randomUUID().toString());
Document documentTwo = new Document();
documentTwo.append("user_name","test_02");
documentTwo.append("pwd","2222222");
documentTwo.append("phone","22222222222");
documentTwo.append("_id",UUID.randomUUID().toString());
List<Document> documentList = new ArrayList<Document>();
documentList.add(documentOne);
documentList.add(documentTwo);
mongoCollection.insertMany(documentList);
}
(5)AND查询条件:
/**
* AND查询条件
* @param mongoCollection
*/
public List<Document> queryAndCondition(MongoCollection<Document> mongoCollection){
//根据字段值查询数据,类似sql中的where条件,多个AND条件直接在document对象中添加即可
//意义:user_name='liusy' and pwd='123456'
Document bsonDocument = new Document();
bsonDocument.append("user_name","liusy");
bsonDocument.append("pwd","123456");
FindIterable<Document> findDocument = mongoCollection.find(bsonDocument);
List<Document> documentList = new ArrayList<Document>();
//获取查询结果转为对象集合
return findDocument.into(documentList);
}
(6)OR查询条件:
/**
* OR查询条件
* @param mongoCollection
*/
public List<Document> queryOrCondition(MongoCollection<Document> mongoCollection){
/**
* 根据字段值查询数据,类似sql中的where条件,多个OR条件代表着先创建多个document对象存储在一个list中,
* 最后通过$or将document的集合存储在一个整体的document中进行查询
*/
//意义:user_name='liusy' or pwd='123456'
BasicDBList conditionList = new BasicDBList();
Document documentOne = new Document();//user_name查询条件对象
documentOne.append("user_name","liusy");
conditionList.add(documentOne);
Document documentTwo = new Document();//pwd查询条件对象
documentTwo.append("pwd","123456");
conditionList.add(documentTwo);
Document queryCondition = new Document();
queryCondition.append("$or",conditionList);//整体or查询条件对象
FindIterable<Document> findDocument = mongoCollection.find(queryCondition);
List<Document> documentList = new ArrayList<Document>();
//获取查询结果转为对象集合
return findDocument.into(documentList);
}
(7)AND与OR查询条件:
/**
* AND与OR查询条件
* @param mongoCollection
*/
public List<Document> queryAndOrConditon(MongoCollection<Document> mongoCollection){
/**
* 根据字段值查询数据,类似sql中的where条件,根据AND、OR条件逻辑,通过$and、$or等逐层组装document查询条件封装,
* 最后形成一个整体的查询条件
*/
//意义:pwd='123456' and (user_name = 'liusy' or phone = '0000')
BasicDBList orConditionList = new BasicDBList();
Document documentOne = new Document("user_name","liusy");//user_name查询条件对象
orConditionList.add(documentOne);
Document documentTwo = new Document("phone","0000");//phone查询条件对象
orConditionList.add(documentTwo);
Document orQueryCondition = new Document();//or查询条件对象
orQueryCondition.append("$or",orConditionList);
Document documentThree = new Document("pwd","123456");//pwd查询条件对象
BasicDBList conditionList = new BasicDBList();
conditionList.add(documentThree);
conditionList.add(orQueryCondition);
Document queryCondition = new Document();//整体查询对象
queryCondition.append("$and",conditionList);
FindIterable<Document> findDocument = mongoCollection.find(queryCondition);
List<Document> documentList = new ArrayList<Document>();
return findDocument.into(documentList);
}
(8)IN查询条件:
/**
* IN查询条件
* @param mongoCollection
*/
public List<Document> queryInCondition(MongoCollection<Document> mongoCollection){
/**
* 根据字段值查询数据,类似sql中的where条件,将in的值存储在一个list集合中,然后将list集合存储在document查询条件对象中。
*/
//意义:pwd in {'0000','123456','222222'}
List<String> phoneList = new ArrayList<String>();
phoneList.add("0000");
phoneList.add("123456");
phoneList.add("222222");
Document document = new Document();//phone的in值对象
document.append("$in",phoneList);
Document queryCondition = new Document();
queryCondition.append("pwd",document);
FindIterable<Document> findDocument = mongoCollection.find(queryCondition);
List<Document> documentList = new ArrayList<Document>();
return findDocument.into(documentList);
}
(9)NOT IN查询条件:
/**
* NOT IN查询条件
* @param mongoCollection
*/
public List<Document> queryNotInCondition(MongoCollection<Document> mongoCollection){
/**
* 根据字段值查询数据,类似sql中的where条件,将not in的值存储在一个list集合中,然后将list集合存储在document查询条件对象中。
*/
//意义:pwd not in {'0000','123456','222222'}
List<String> phoneList = new ArrayList<String>();
phoneList.add("0000");
phoneList.add("123456");
phoneList.add("222222");
Document document = new Document();//phone的not in值对象
document.append("$nin",phoneList);
Document queryCondition = new Document();
queryCondition.append("pwd",document);
FindIterable<Document> findDocument = mongoCollection.find(queryCondition);
List<Document> documentList = new ArrayList<Document>();
return findDocument.into(documentList);
}
(10)修改单条数据:
/**
* 修改单条数据
* @param mongoCollection
*/
public Long updateOneDocument(MongoCollection<Document> mongoCollection){
//根据字段值查询数据,类似sql中的where条件
Document bsonDocument = new Document();
bsonDocument.append("user_name","test_01");
//将需要修改的字段新值存储到一个对象中
Document updateDocument = new Document();
updateDocument.append("user_name","test_01_update");
updateDocument.append("pwd","111111_update");
updateDocument.append("phone","11111111_update_phone");
//将需要修改的新值对象set到一个对象中,类似sql中的set
Document setDocument = new Document("$set",updateDocument);
//将查询条件对象、修改set对象传递给updateOne方法进行修改,返回修改数量
Long modifiedCount = mongoCollection.updateOne(bsonDocument,setDocument).getModifiedCount();
return modifiedCount;
}
(11)修改多条数据:
/**
* 修改多条数据
* @param mongoCollection
*/
public Long updateMultipleDocument(MongoCollection<Document> mongoCollection){
//根据字段值查询数据,类似sql中的where条件
Document bsonDocument = new Document();
bsonDocument.append("phone","1111111");
//将需要修改的字段新值存储到一个对象中
Document updateDocument = new Document();
updateDocument.append("phone","update_phone_multiple");
//将需要修改的新值对象set到一个对象中,类似sql中的set
Document setDocument = new Document("$set",updateDocument);
//将查询条件对象、修改set对象传递给updateOne方法进行修改,返回修改数量
Long modifiedCount = mongoCollection.updateMany(bsonDocument,setDocument).getModifiedCount();
return modifiedCount;
}
(12)替换某条数据:
替换某条数据,就是将该条数据之前的字段全部去掉,按照最新的字段进行存储。
/**
* 替换某条数据
* @param mongoCollection
*/
public Long replaceOneDocument(MongoCollection<Document> mongoCollection){
Document document = new Document();
document.append("_id","db56bb73-c7a9-4d66-bdea-bc4c19f587f5");
Document replaceDocument = new Document();
replaceDocument.append("user_names","test_replace");
replaceDocument.append("passwords","66666");
replaceDocument.append("replace_date",new Date());
Long modifiedCount = mongoCollection.replaceOne(document,replaceDocument).getModifiedCount();
return modifiedCount;
}
(13)删除单条数据:
/**
* 删除单条数据
* @param mongoCollection
*/
public Long deleteOneDocument(MongoCollection<Document> mongoCollection){
Document document = new Document();
document.append("_id","db56bb73-c7a9-4d66-bdea-bc4c19f587f5");
Long deletedCounts = mongoCollection.deleteOne(document).getDeletedCount();
return deletedCounts;
}
(14)删除多条数据:
/**
* 删除多条数据
* @param mongoCollection
*/
public Long deleteMultipleDocument(MongoCollection<Document> mongoCollection){
Document document = new Document();
document.append("pwd","222222");
Long deletedCounts = mongoCollection.deleteMany(document).getDeletedCount();
return deletedCounts;
}
(15)查看单条数据:
/**
* 查询单条数据
* @param mongoCollection
*/
public Document queryOneDocument(MongoCollection<Document> mongoCollection){
//根据字段值查询数据,类似sql中的where条件
Document bsonDocument = new Document();
bsonDocument.append("user_name","test_01");
FindIterable<Document> findDocument = mongoCollection.find(bsonDocument);
//获取查询结果的一条对象
return findDocument.first();
}
(16)查看多条数据:
/**
* 查询多条数据
* @param mongoCollection
*/
public List<Document> queryMultipleDocument(MongoCollection<Document> mongoCollection){
//根据字段值查询数据,类似sql中的where条件
Document bsonDocument = new Document();
bsonDocument.append("phone","1111111");
FindIterable<Document> findDocument = mongoCollection.find(bsonDocument);
List<Document> documentList = new ArrayList<Document>();
//将查询结果转换为对象集合
findDocument.into(documentList);
return documentList;
}
(17)查看排序数据:
/**
* 查询数据排序
* @param mongoCollection
* @return
*/
public List<Document> querySortDocument(MongoCollection<Document> mongoCollection){
Bson ascBson = Sorts.ascending("phone");//升序
Bson descBson = Sorts.descending("phone");//降序
FindIterable<Document> findDocument = mongoCollection.find().sort(descBson);
List<Document> documentList = new ArrayList<Document>();
//将查询结果转换为对象集合
findDocument.into(documentList);
return documentList;
}
(18)全模糊查询数据:
/**
* 全模糊查询
* @param mongoCollection
*/
public List<Document> queryLikeDocument(MongoCollection<Document> mongoCollection){
//意义:like '%san%'
Document bsonDocument = new Document();
Pattern pattern = Pattern.compile("^.*san.*$",Pattern.CASE_INSENSITIVE);//哪侧有%哪侧就带.*
bsonDocument.append("user_name",pattern);
FindIterable<Document> findDocument = mongoCollection.find(bsonDocument);
List<Document> documentList = new ArrayList<Document>();
//将查询结果转换为对象集合
findDocument.into(documentList);
return documentList;
}
(19)左模糊查询数据:
/**
* 左模糊查询
* @param mongoCollection
*/
public List<Document> queryLeftLikeDocument(MongoCollection<Document> mongoCollection){
//意义:like '%san'
Document bsonDocument = new Document();
Pattern pattern = Pattern.compile("^.*san$",Pattern.CASE_INSENSITIVE);//哪侧有%哪侧就带.*
bsonDocument.append("user_name",pattern);
FindIterable<Document> findDocument = mongoCollection.find(bsonDocument);
List<Document> documentList = new ArrayList<Document>();
//将查询结果转换为对象集合
findDocument.into(documentList);
return documentList;
}
(20)右模糊查询数据:
/**
* 右模糊查询
* @param mongoCollection
*/
public List<Document> queryRightLikeDocument(MongoCollection<Document> mongoCollection){
//意义:like 'liu%'
Document bsonDocument = new Document();
Pattern pattern = Pattern.compile("^liu.*$",Pattern.CASE_INSENSITIVE);//哪侧有%哪侧就带.*
bsonDocument.append("user_name",pattern);
FindIterable<Document> findDocument = mongoCollection.find(bsonDocument);
List<Document> documentList = new ArrayList<Document>();
//将查询结果转换为对象集合
findDocument.into(documentList);
return documentList;
}
(21)分页查询数据:
/**
* 分页查看数据
* @param mongoCollection
*/
public List<Document> queryLimitDocument(MongoCollection<Document> mongoCollection,Integer startIndex,Integer pageSize){
Integer startIndexInt = startIndex;//起始角标
Integer pageSizeInt = pageSize;//分页大小
FindIterable<Document> findDocument = mongoCollection.find().skip(startIndexInt).limit(pageSizeInt);
List<Document> documentList = new ArrayList<Document>();
//将查询结果转换为对象集合
findDocument.into(documentList);
return documentList;
}
(22)分组统计数据:
/**
* 分组统计数据
* @param mongoCollection
*/
public List<Document> queryGroupByDocument(MongoCollection<Document> mongoCollection){
/**
* 意义:select pwd,count(*) 'count' from test_user group by pwd
* mongodb表达式:db.lsy_test.test_user([{$group:{_id:{pwd:$pwd},total_counts:{$sum,1}}}]);
*/
List<Document> documentList = new ArrayList<Document>();
Document groupDoc = new Document();
groupDoc.append("pwd","$pwd");
groupDoc.append("phone","$phone");
Document documentTwo = new Document();
documentTwo.append("_id",groupDoc);//用来存储group字段,可以存储多个字段
documentTwo.append("total_counts",new Document("$sum",1));//用来存储group分组后执行的函数
Document document = new Document();
document.append("$group",documentTwo);
documentList.add(document);
AggregateIterable<Document> aggretateResult = mongoCollection.aggregate(documentList);
List<Document> resultDocumentList = new ArrayList<Document>();
return aggretateResult.into(resultDocumentList);
}