mongodb与java连接_MongoDB与java连接操作

训练大纲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"));

}

}*/

}

分享/讲解/扩展思考

点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值