首页 > 数据库 >mongodb(5)--使用Java操作MongoDB

mongodb(5)--使用Java操作MongoDB

时间:2023-05-25 20:55:16浏览次数:50  
标签:Java name -- mongodb collection 文档 Filters new Document

一、环境的准备

1、MongoDB已经安装完成

2、java环境准备

(1)jdk:oracle官网:https://www.oracle.com/java/technologies/downloads/

(2)开发工具:

  eclipse官网:https://www.eclipse.org/

  idea官网:https://www.jetbrains.com.cn/idea/

3、选择MongoDB JDBC驱动

https://mongodb.github.io/mongo-java-driver/(可以下载后放在电脑任意位置,只需要在java工程中导入即可)

mongo-java-driver-3.12.1.jar

二、Java代码实现

1、连接数据库

// 连接本地数据库
MongoClient conn=new MongoClient("127.0.0.1");
// show dbs查看所有的数据库
for(String name:conn.listDatabaseNames()){
    System.out.println("dbName:"+name);
}

2、获取数据库

// getDatabase == use database
// 获取名字为dbName的数据库
MongoDatabase db=conn.getDatabase("dbName");
// 查看dbName数据库的所有集合
for(String nameColl:db.listCollectionNames()){
    System.out.println("collectionName:"+nameColl);
}

 3、创建集合

// 创建集合=db.createCollection()
// 创建一个名字为collectionName的集合
db.createCollection("collectionName");

 4、删除集合

// 删除集合=db.collectionname.drop
// 先获取到这个集合collectionName,然后删除
MongoCollection<Document> collection = db.getCollection("collectionName");
collection.drop();

 5、获取集合(获取的这个集合,这个集合中放着文档<document>)

// 使用com.mongodb.client.MongoDatabase类的getCollection()方法来获取一个集合的文档=db.collectionName
// 返回值:com.mongodb.client.MongoCollection类
// 放的就是一条一条的集合这个document这个类
MongoCollection<Document> collection = mongoDatabase.getCollection("collectionName");
// 查看文档数
collection.count();

6、插入文档

 (1)插入一条文档

// 插入一个文档=insertOne:collection.insertOne(doc);
// 新建一个文档doc
Document doc = new Document();
// 使用put放入键值对
doc.put("name", "zs");
doc.put("age", 25);
// book是一个数组
List<String> books=new ArrayList<String>();
books.add("C");
books.add("Java");
books.add("JS");
doc.put("books", books);
// 插入文档
collection.insertOne(doc);

  (2)插入多个文档

// 插入多个文档=insertMany:collection.insertMany(documents);
// 创建两个文档
Document document1 = new Document("name","张三").append( "age",20);
Document document2 = new Document( "name", "李四").append("age", 21);
// 把这两个文档放入documents数组中
List<Document> documents = new ArrayList<Document>();
documents.add(document1);
documents.add(document2);
// 插入多个文档
collection.insertMany(documents);

 7、删除文档

// 先创建一个文档
Document docDelete=new Document();
// 在里面添加想要删除的文档的条件
docDelete.append("name", "张三");
collection.deleteMany(docDelete);

8、更新文档

// 先创建一个文档
Document docUpdate=new Document();
// 添加要更新的
docUpdate.append("$set",new Document("email","[email protected]"));
// Filters常常用来过滤条件 Filters.eq用于指定等于条件
collection.updateOne(Filters.eq("name","李四"), docUpdate);
collection.updateMany(Filters.eq("name","李四"), docUpdate);
// updateOne更新一条文档;updateMany更新多条文档

 9、查询文档

 (1)普通查询

// FindIterable查询之后返回文档的类
FindIterable<Document> findIterable = collection.find();
// 使用for each打印出每一条文档
for(Document document:findIterable){
    System.out.println(document);
}

 (2)按条件查询

// 使用Filters过滤条件
FindIterable<Document> findIterable = collection.find(Filters.eq("name","李四"));
// 使用for each打印出符合条件的文档
for(Document document:findIterable){
    System.out.println(document);
}

 (3)多条件查询

// 使用Filters.add添加多个条件
// Bson类型
Bson filter=Filters.and(Filters.eq("name","李四"),Filters.eq("age", 25));
FindIterable<Document> findIterable = collection.find(filter);
for(Document document:findIterable){
    System.out.println(document);
}

10、游标(使用游标输出文档)

// 先查询文档或者按条件查询
FindIterable<Document> findIterable = collection.find();
// 使用游标
MongoCursor<Document> mongoCursor = findIterable.iterator();
// hasNext()就是判断是否还有下一个 有下一个继续往下走
while(mongoCursor.hasNext()){
    Document doc1=mongoCursor.next();
    // name age books  都是字段
    System.out.println(doc1.get("name")
                       +"》" +doc1.get("age")
                       +"》" +doc1.get("books"));
    // System.out.println(mongoCursor.next());
}

 

标签:Java,name,--,mongodb,collection,文档,Filters,new,Document
From: https://www.cnblogs.com/hyy-0/p/17421789.html

相关文章

  • 博弈论
    博弈论在OI中主要研究组合博弈,可能也会与其它的知识点相结合。做博弈论题时,我们要利用已有的博弈结论,或是建出模型解决问题。组合博弈组合博弈一般分为两种:平等博弈:可允许的操作只和当前局面的状态而和操作的玩家无关。不平等博弈:可允许的操作还和当前操作的玩家相关。......
  • 选择排序算法之泛型优化
    选择排序算法工作原理:每一次从待排序的数据元素中选中最小的一个元素,然后,再从剩余未排序元素中继续寻找最小元素,将2个元素交换位置,就达到了已排序的元素一直是从小到大了。这个算法的时间复杂度为O(n²),空间复杂度为O(1)。/***@Author:翰林猿*@Description:选择排序*......
  • 《程序员修炼之道--从小工到专家》阅读笔记03
    本次阅读的是第四章和第五章,下面是阅读笔记和心得体会。第四章:注重实践本章主要强调的是从理论到实践的转变,推崇实践、实验和原型设计等方式来使软件开发更加高效和成功。作者说,软件开发是一项具有实验性质的工作,我们需要反复实验,检查和验证我们的判断和设计是否符合预期。同时,还......
  • 实验6
    实验4运行代码#include<stdio.h>#include<string.h>#defineN100typedefstruct{charnum[10];//学号ints1;//期末成绩ints2;//平时成绩doublesum;//总评charlevel[10];//等级}S......
  • NumPy_矩阵的八种运算以及变换矩阵
    概念numpy下的linalg=linear+algebra01.数学概念vector向量array:数组matrix:矩阵标量(数量)物理定义:只有大小,没有方向的量n个有次序的数a_{1},a_{2},····,a_{n}所组成的数组称为n维向量--行向量和列向量数组,是有序的元素序列m×n个数aij(i=1,2......
  • 计算几何
    前言计算几何的基础基本就是高中学过的内容,一般来说OI中应该不会考那些纯数学的解析几何,但是往往会和其它算法结合(比如斜率优化DP,当时学的时候我还不会求凸包,令人感叹)。前置知识一些常量\(\text{Pi}\):即\(\pi\),用\(\arccos\)来求能使精度误差最小。\(\text{INF}\)就......
  • 深度学习分类网络---ResNet
    一、为什么引入ResNet通过上一篇分类网络的介绍,我们知道网络的宽度和深度可以很好的提高网络的性能,深的网络一般都比浅的的网络效果好,但训练一个很深的网络是非常困难的,一方面是网络越深越容易出现梯度消失和梯度爆炸问题,然而这个问题通过BN层和ReLU激活函数等方法在很大程度上......
  • P2480 古代猪文 题解
    题意:求\[g^{\sum_{k\midn}{n\choosek}}\]对\(999911659\)取模。\(1\len,g\le10^9\)。思路:首先根据欧拉定理,题目转化为求\(\displaystyle\sum_{k\midn}{n\choosek}\)对\(999911658\)取模的值。模数为合数不是很好做,因式分解发现\(999911658=2\times3\times467......
  • 构建之法阅读笔记07
    第十章典型用户和场景10.1典型用户和典型场景①怎样定义典型用户?我们首先要定义用户的角色。正如戏剧中有正面和反面的角色,软件系统中也有受欢迎的和不受欢迎的典型用户。受欢迎的典型用户——指那些按设计者的期望使用系统的用户,如“网站的购物者”不受欢迎的典型用户—......
  • 实验六
    #include<stdio.h>#include<string.h>#defineN100typedefstruct{charnum[10];//学号ints1;//期末成绩ints2;//平时成绩doublesum;//总评charlevel[10];//等级}STU;intfun(......