训练大纲MongoDb4
大家如果想快速有效的学习,思想核心是“以建立知识体系为核心”,具体方法是“守破离”。确保老师课堂上做的操作,反复练习直到熟练。
第145次(MongoDb3)
学习主题:MongoDb3
学习目标:
掌握如下内容添加文档
更新文档
查询文档
运算符的使用
日期操作
聚合操作
分页操作
对应视频:
对应文档:
无
对应作业
完成对应代码 反复练习 直到熟练
package com.bjsxt;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
/**
* 支持用户的池连认证
*/
public class MongoDBAuthPoolUtil {
private static MongoClient client =null;
static {
if (client==null){
MongoClientOptions.Builder builder = new MongoClientOptions.Builder();
builder.connectionsPerHost(10);//每个地址的最大连接数
builder.connectTimeout(5000);//连接超时时间
builder.socketTimeout(5000);//设置读写操作超时时间
MongoCredential credential = MongoCredential.createCredential("itsxt", "develop", "itsxtpwd".toCharArray());
ServerAddress address = new ServerAddress("192.168.240.143", 27017);
client = new MongoClient(address,credential,builder.build());
}
}
//获取MongoDB数据库
public static MongoDatabase getDatebase(String dbname){
return client.getDatabase(dbname);
}
//获取MongoDB集合
public static MongoCollection getCollection(String dbname, String dbcollection){
MongoDatabase datebase = getDatebase(dbname);
return datebase.getCollection(dbcollection);
}
//创建MongoDB集合
public static void createCollection(String dbname,String collname){
MongoDatabase datebase = getDatebase(dbname);
datebase.createCollection(collname);
}
//删除集合
public static void dropCollection(MongoCollection collection){
collection.drop();
}
}
package com.bjsxt1;
import com.bjsxt.MongoDBAuthPoolUtil;
import com.mongodb.client.MongoCollection;
import org.bson.Document;
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class InsertDocument {
/**
* 添加单个文档
*/
@Test
public void insertDocument() {
MongoCollection collection = MongoDBAuthPoolUtil.getCollection("develop", "devtest");
Document document = new Document();
document.append("username", "张三").append("userage", 26).append("userlike", Arrays.asList(new String[]{"打篮球", "玩游戏"}));
collection.insertOne(document);
}
/**
* 添加多个文档
*/
@Test
public void inserManyDocument() {
MongoCollection collection = MongoDBAuthPoolUtil.getCollection("develop", "devtest");
List list = new ArrayList();
for (int i = 0; i < 5; i++) {
Document document = new Document();
document.append("username", "孙悟空" + i);
document.append("userage", 20 + i);
document.append("userlike", Arrays.asList(new String[]{"打妖精", "保唐僧"}));
list.add(document);
}
collection.insertMany(list);
}
}
package com.bjsxt1;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.model.Filters;
import org.bson.Document;
import org.bson.types.ObjectId;
import org.junit.jupiter.api.Test;
import java.util.regex.Pattern;
public class SelectDocument {
/**
* 查询所有文档
*/
/*@Test
public void selectDocumentAll() {
MongoCollection collection = MongoDBAuthPoolUtil.getCollection("develop", "devtest");
FindIterable iterable = collection.find();//返回的是一个文档的迭代器
MongoCursor cursor = iterable.iterator();//返回存放文档的移动游标
while (cursor.hasNext()) {//游标的判断
Document document = cursor.next();//游标的移动
System.out.println(document.get("username") + "\t" + document.get("userage") + "\t" + document.get("userlike"));
}
}*/
/**
* $eq
* 根据id查询文档
*/
/* @Test
public void selectDocumentById() {
MongoCollection collection = MongoDBAuthPoolUtil.getCollection("develop", "devtest");
FindIterable iterable = collection.find(Filters.eq("_id",new ObjectId("5dc0d436cffb6a1f3488e88b")));//返回的是一个文档的迭代器
MongoCursor cursor = iterable.iterator();//返回存放文档的移动游标
while (cursor.hasNext()) {//游标的判断
Document document = cursor.next();//游标的移动
System.out.println(document.get("username") + "\t" + document.get("userage") + "\t" + document.get("userlike"));
}
}*/
/**
* $gt
* 根据年龄查询文档,条件是年龄大于19
*/
/* @Test
public void selectDocumentConditionByGt(){
MongoCollection collection = MongoDBAuthPoolUtil.getCollection("develop", "devtest");
FindIterable iterable = collection.find(Filters.gt("userage", 19));//获取迭代器
MongoCursor iterator = iterable.iterator();
while (iterator.hasNext()){
Document document = iterator.next();
System.out.println(document.get("username")+"\t"+document.get("userage")+"\t"+document.get("userlike"));
}
}*/
/**
* $type
* 根据年龄查询文档,条件是年龄值是整数类型(number)
*/
/*@Test
public void selectDocumentConditionByType(){
MongoCollection collection = MongoDBAuthPoolUtil.getCollection("develop", "devtest");
FindIterable iterable = collection.find(Filters.type("userage", "number"));
MongoCursor iterator = iterable.iterator();
while (iterator.hasNext()){
Document document = iterator.next();
System.out.println(document.get("username")+"\t"+document.get("userage")+"\t"+document.get("userlike"));
}
}*/
/**
* $in
* 查询用户的名字为孙悟空1,孙悟空2
*/
/*@Test
public void selectDocumentConditionIn() {
MongoCollection collection = MongoDBAuthPoolUtil.getCollection("develop", "devtest");
FindIterable iterable = collection.find(http://Filters.in("username", "孙悟空1","孙悟空2"));
MongoCursor iterator = iterable.iterator();
while (iterator.hasNext()){
Document document = iterator.next();
System.out.println(document.get("username")+"\t"+document.get("userage")+"\t"+document.get("userlike"));
}
}*/
/**
* $nin
* 查询用户的爱好不是打妖精,保唐僧
*/
/*@Test
public void selectDocumentConditionNin(){
MongoCollection collection = MongoDBAuthPoolUtil.getCollection("develop", "devtest");
FindIterable iterable = collection.find(Filters.nin("userlike", "打妖精", "保唐僧"));
MongoCursor iterator = iterable.iterator();
while (iterator.hasNext()){
Document document = iterator.next();
System.out.println(document.get("username")+"\t"+document.get("userage")+"\t"+document.get("userlike"));
}
}*/
/**
* $regex
* 查询用户名字以齐开头以圣结尾
*/
/*@Test
public void selectDocumentConditionByRegex() {
MongoCollection collection = MongoDBAuthPoolUtil.getCollection("develop", "devtest");
FindIterable iterable = collection.find(Filters.regex("username", Pattern.compile("^齐.*圣$")));
MongoCursor iterator = iterable.iterator();
while (iterator.hasNext()) {
Document document = iterator.next();
System.out.println(document.get("username") + "\t" + document.get("userage") + "\t" + document.get("userlike"));
}
}*/
/**
* $and
* 查询用户名为小三 ,并且年龄是19的
*/
/*@Test
public void selectDocumentConditionByAnd() {
MongoCollection collection = MongoDBAuthPoolUtil.getCollection("develop", "devtest");
FindIterable iterable = collection.find(Filters.and(Filters.eq("username", "小三"),
Filters.eq("userage", 19), Filters.eq("userlike", "玩游戏")));
MongoCursor iterator = iterable.iterator();
while (iterator.hasNext()) {
Document document = iterator.next();
System.out.println(document.get("username") + "\t" + document.get("userage") + "\t" + document.get("userlike"));
}
}*/
/**
* $or
* 查询用户名是齐天大圣,或者是年龄为19,或者是爱好是找神仙
*/
/*@Test
public void selectDocumentConditionByOr() {
MongoCollection collection = MongoDBAuthPoolUtil.getCollection("develop", "devtest");
FindIterable iterable = collection.find(Filters.or(Filters.eq("username", "齐天大圣"), Filters.eq("userage", 19),
http://Filters.in("userlike", "找神仙", "打篮球")));
MongoCursor iterator = iterable.iterator();
while (iterator.hasNext()) {
Document document = iterator.next();
System.out.println(document.get("username") + "\t" + document.get("userage") + "\t" + document.get("userlike"));
}
}*/
/**
* $and$or联合使用
* 查询用户名为张三并且年龄为26,或者爱好是找神仙
*/
/*@Test
public void selectDocumentConditionAndOr() {
MongoCollection collection = MongoDBAuthPoolUtil.getCollection("develop", "devtest");
FindIterable iterable = collection.find(Filters.or(Filters.and(Filters.eq("username", "张三"),
Filters.eq("userage", 26)), Filters.eq("userlike", "找神仙")));
MongoCursor iterator = iterable.iterator();
while (iterator.hasNext()) {
Document document = iterator.next();
System.out.println(document.get("username") + "\t" + document.get("userage") + "\t" + document.get("userlike"));
}
}*/
/**
* $regex
* $sort
* 查询用户以孙开头,并对查询结果排序 1正序 -1倒序
*/
@Test
public void selectDocumentSorting(){
MongoCollection collection = MongoDBAuthPoolUtil.getCollection("develop", "devtest");
FindIterable iterable = collection.find(Filters.regex("username", Pattern.compile("^孙"))).sort(new Document("username", -1));
MongoCursor iterator = iterable.iterator();
while (iterator.hasNext()){
Document document = iterator.next();
System.out.println(document.get("username") + "\t" + document.get("userage") + "\t" + document.get("userlike"));
}
}
}
package com.bjsxt1;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.model.Filters;
import org.bson.Document;
import org.junit.jupiter.api.Test;
public class UpdateDcument {
/**
* 更新单个文档单个键
*/
@Test
public void updateSingoDocumentSingoKey() {
MongoCollection collection = MongoDBAuthPoolUtil.getCollection("develop", "devtest");
collection.updateOne(Filters.eq("username", "张三"), new Document("$set", new Document("userage", 28)));
}
/**
* 更新单个文档多个键
*/
@Test
public void updateSingoDocumentManyKey(){
MongoCollection collection = MongoDBAuthPoolUtil.getCollection("develop", "devtest");
collection.updateOne(Filters.eq("username","张三"),new Document("$set",new Document("username","小三").append("userage",19)));
}
/**
* 更新多个文档单个键
*/
@Test
public void updateManyDocumentSingoKey(){
MongoCollection collection = MongoDBAuthPoolUtil.getCollection("develop", "devtest");
collection.updateMany(Filters.eq("username","孙悟空0"),new Document("$set",new Document("username","齐天大圣")));
}
/**
* 更新多个文档多个键
*/
public void updateManyDocumentManyKey(){
MongoCollection collection = MongoDBAuthPoolUtil.getCollection("develop", "devtest");
collection.updateMany(Filters.eq("username","孙悟空0"),new Document("$set",new Document("username","齐天大圣").append("userage",24)));
}
/**
* 更新文档数组
*/
@Test
public void uodateDocumentArray(){
//$push 向数组中添加元素
MongoCollection collection = MongoDBAuthPoolUtil.getCollection("develop", "devtest");
collection.updateOne(Filters.eq("username","孙悟空1"),new Document("$push",new Document("userlike","找神仙")));
}
}
package com.bjsxt1;
import com.mongodb.client.AggregateIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import org.bson.Document;
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* $project 投影操作
*/
public class ProjectOper {
/**
* 聚合投影
* db.dev.aggregate([{$unwind:'$tags'},{$project:{_id:0,title:'$title',tags:'$tags'}}])
*/
/*@Test
public void selectDocumentAggregateProject() {
MongoCollection collection = MongoDBAuthPoolUtil.getCollection("develop", "dev");
List list = new ArrayList();
Document unwind = new Document("$unwind", "$tags");
Document project = new Document();
project.put("_id", 0);
project.put("title", "$title");
project.put("tags", "$tags");
Document document = new Document("$project", project);
list.add(unwind);
list.add(document);
AggregateIterable iterable = collection.aggregate(list);
MongoCursor iterator = iterable.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}*/
/**
* $project 字符串处理
* db.dev.aggregate([{$unwind:'$tags'},{$project:{_id:0,Title_Tags:{$concat:["$title","-","$tags"]}}}])
*/
@Test
public void selectDocumentProjectConcat(){
MongoCollection collection = MongoDBAuthPoolUtil.getCollection("develop", "dev");
List list = new ArrayList();
Document unwind = new Document("$unwind", "$tags");
Document concat = new Document("$concat", Arrays.asList(new String[]{"$title","-","$tags"}));
Document title = new Document();
title.put("_id",0);
title.put("Title_Tags",concat);
Document project = new Document("$project",title);
list.add(unwind);
list.add(project);
AggregateIterable iterable = collection.aggregate(list);
MongoCursor cursor = iterable.iterator();
while (cursor.hasNext()){
System.out.println(cursor.next());
}
}
/**
* 需求 查询dev集合数据,显示title和size字段,为size字段数据做加1处理,显示字段命名为New_Size.排除那些没有size键的文档
* db.dev.aggregate([{$match:{size:{$ne:null}}},{$project:{_id:0,title:'$title',New_Size:{$add:["$size"1]}}}])
*/
/**
* $project 日期处理自定义日期
* 查询dev集合那些有生日的用户,并按照YYYY年mm月dd日 HH:MM:SS格式显示日期。
* db.dev.aggregate([
* {$match:{birth:{'$ne':null}}},
* {$project:{自定义日期格式:{$dateToString:{format:"%Y年%m月%d日 %H时%M分%S秒",date:'$birth'}}}}
* ])
*/
}
package com.bjsxt1;
import com.bjsxt.DateUtil;
import com.mongodb.client.AggregateIterable;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.model.Filters;
import org.bson.Document;
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
/**
* 日期操作
*/
public class DateOperation {
/**
* 插入系统当前日期
*/
/*@Test
public void insertDocumentSystemDate() {
MongoCollection collection = MongoDBAuthPoolUtil.getCollection("develop", "devtest");
Document document = new Document();
document.put("username", "大田俊生仔");
document.put("userage", 18);
document.put("userlike", Arrays.asList(new String[]{"爱笑", "可爱", "甜雅"}));
document.put("birthday", new Date());
collection.insertOne(document);
}*/
/**
* 插入指定字符串日期(将字符串转化为Date)
*/
@Test
public void insertDocumentCustomDate() {
MongoCollection collection = MongoDBAuthPoolUtil.getCollection("develop", "devtest");
Date date = DateUtil.stringToDate("yyyy-MM-dd HH:mm:ss", "2019-11-05 16:02:25");
Document document = new Document();
document.put("username", "小雅");
document.put("userage", 18);
document.put("userlike", Arrays.asList(new String[]{"爱苦", "温柔", "甜静"}));
document.put("birthday", date);
collection.insertOne(document);
}
/**
* $eq
* 查询日期:查询用户生日是2019-11-05 16:02:25
*/
/*@Test
public void selectDocumentDateEq() {
MongoCollection collection = MongoDBAuthPoolUtil.getCollection("develop", "devtest");
Date date = DateUtil.stringToDate("yyyy-MM-dd HH:mm:ss", "2019-11-05 16:02:25");
FindIterable iterable = collection.find(Filters.eq("birthday", date));
MongoCursor iterator = iterable.iterator();
while (iterator.hasNext()) {
Document document = iterator.next();
String temp = DateUtil.dateToString("yyyy-MM-dd HH:mm:ss",(Date) document.get("birthday"));
System.out.println(document.get("username") + "\t" + document.get("userage") + "\t" + document.get("userlike") + "\t" +
document.get("birthday")+"\t"+temp);
}
}*/
/**
* $eq
* 查询日期:查询用户生日是大于2019-11-01 00:00:00
*/
@Test
public void selectDocumentDateGt() {
MongoCollection collection = MongoDBAuthPoolUtil.getCollection("develop", "devtest");
Date date = DateUtil.stringToDate("yyyy-MM-dd HH:mm:ss", "2019-11-01 00:00:00");
FindIterable iterable = collection.find(Filters.gt("birthday", date));
MongoCursor iterator = iterable.iterator();
while (iterator.hasNext()) {
Document document = iterator.next();
String temp = DateUtil.dateToString("yyyy-MM-dd HH:mm:ss", (Date) document.get("birthday"));
System.out.println(document.get("username") + "\t" + document.get("userage") + "\t" + document.get("userlike") + "\t" +
document.get("birthday") + "\t" + temp);
}
}
/**
* 查询集合中的文档数量
* db.dev.aggregate([{$group:{_id:null,count:{$sum:1}}}])
*/
/* @Test
public void selectDocumentAggregateCount(){
MongoCollection collection = MongoDBAuthPoolUtil.getCollection("develop", "dev");
List list = new ArrayList();
//Document document = new Document("$group", new Document("_id", null, "count",new Document("$sum", 1)));
Document sum = new Document("$sum", 1);//{$sum:1}
Document count = new Document();
count.put("_id",null);
count.put("count",sum);//{_id:null,count:{$sum:1}}
Document document = new Document("$group", count);//{$group:{_id:null,count:{$sum:1}}}
list.add(document);
AggregateIterable iterable = collection.aggregate(list);
MongoCursor iterator = iterable.iterator();
while (iterator.hasNext()){
Document next = iterator.next();
System.out.println(next.get("count"));
}
}*/
/**
* 查询集合中size列的总和
* db.dev.aggregate([{$group:{_id:null,totalSize:{$sum:'$size'}}}])
*/
/*@Test
public void selectDocumentSizeSum(){
MongoCollection collection = MongoDBAuthPoolUtil.getCollection("develop", "dev");
List list = new ArrayList();
Document totalSize = new Document("$sum", "$size");
Document group = new Document();
group.put("_id",null);
group.put("totalSize",totalSize);
Document document = new Document("$group",group);
list.add(document);
AggregateIterable iterable = collection.aggregate(list);
MongoCursor iterator = iterable.iterator();
while (iterator.hasNext()){
Document next = iterator.next();
System.out.println(next.get("totalSize"));
}
}*/
/**
* 分组求和
* db.dev.aggregate.([{$group:{_id:'$title',totalSize:{$sum:'$size'}}}])
*/
/*@Test
public void selectDocumentGroupSum(){
MongoCollection collection = MongoDBAuthPoolUtil.getCollection("develop", "dev");
List list = new ArrayList();
Document totalSize = new Document("$sum", "$size");
Document group = new Document();
group.put("_id","$title");
group.put("totalSize",totalSize);
Document document = new Document("$group",group);
list.add(document);
AggregateIterable iterable = collection.aggregate(list);
MongoCursor iterator = iterable.iterator();
while (iterator.hasNext()){
Document next = iterator.next();
System.out.println(next.get("_id")+"\t"+next.get("totalSize"));
}
}*/
/**
* $match
* 分组前过滤
* 查询有多少文档的size大于200
* db.dev.aggregate([{$match:{size:{$gt:200}}},{$group:{_id:null,totalSize:{$sum:1}}}])
*/
/*@Test
public void selectDocumentAggregateGroupByWhere() {
MongoCollection collection = MongoDBAuthPoolUtil.getCollection("develop", "dev");
List list = new ArrayList();
Document match = new Document("$match", new Document("size", new Document("$gt", 200)));
Document sum = new Document();
sum.put("$sum", 1);
Document totalSize = new Document();
totalSize.put("_id", null);
totalSize.put("totalSize", sum);
Document group = new Document("$group", totalSize);
list.add(match);
list.add(group);
AggregateIterable iterable = collection.aggregate(list);
MongoCursor iterator = iterable.iterator();
while (iterator.hasNext()) {
Document document = iterator.next();
System.out.println(document.get("totalSize"));
}
}*/
/**
* 聚合操作分组后过滤
* db.dev.aggregate([{$group:{_id:'$title',totalSize:{$sum:'$size'}}},{$match:{totalSize:{$gte:200}}}])
*/
/*@Test
public void selectDocumentGroupByHaving() {
MongoCollection collection = MongoDBAuthPoolUtil.getCollection("develop", "dev");
List list = new ArrayList();
Document match = new Document("$match", new Document("totalSize", new Document("$gte", 200)));
Document sum = new Document("$sum", "$size");
Document totalSize = new Document();
totalSize.put("_id", "$title");
totalSize.put("totalSize", sum);
Document group = new Document("$group", totalSize);
list.add(group);
list.add(match);
AggregateIterable iterable = collection.aggregate(list);
MongoCursor iterator = iterable.iterator();
while (iterator.hasNext()) {
Document document = iterator.next();
System.out.println(document.get("_id") + "\t" + document.get("totalSize"));
}
}*/
}
分享/讲解/扩展思考
点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。