Java操作MongoDB基本使用
1.添加依赖
在maven的pom.xml种添加依赖
<!-- https://mvnrepository.com/artifact/org.mongodb/mongo-java-driver -->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.11.0</version>
</dependency>
2.操作
注意:在MongoDB3.6版本以后有一个安全策略,默认只允许localhost连接操作数据库。
处理方案:
1.关闭Linux系统的防火墙
2.开启MongoDB的多客户端连接
如何开启?在启动MongoDB的时候,在指令中加一个 --bind_ip 0.0.0.0
获取MongoDB的连接对象
获取MongoDB的连接对象的代码最好封装为工具类
package cn.com.zhangruilin.util;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoDatabase;
import java.util.ArrayList;
import java.util.List;
/**
* 获取数据库对象工具类
* @author hellfs
* 2020-08-06
*/
public class MongoDBUtil extends LoggerObject{
/**
* MongoDB连接对象
*/
private MongoClient client;
/**
* MongoDBUtil对象
*/
private static MongoDBUtil instance;
/**
* 获取MongoDBUtil对象
* @return MongoDBUtil
*/
public static MongoDBUtil getInstance(){
if(instance == null){
instance = new MongoDBUtil();
}
return instance;
}
/**
* 关闭连接对象
*/
public void closeDB(){
if(client != null){
client.close();
}
client = null;
}
/**
* 不需要认证获取连接对象
*/
public void mongoClient(){
try {
//获取mongodb连接对象
client = new MongoClient("localhost",27017);
} catch (Exception e) {
logger.info("不需要认证获取连接对象失败,{}",e);
}
}
/**
* 需要认证获取连接对象
*/
public void certifyMongoClient(){
try {
//连接到MongoDB服务 如果是远程连接可以替换“localhost”为服务器所在IP地址
//ServerAddress()两个参数分别为 服务器地址 和 端口
ServerAddress serverAddress = new ServerAddress("localhost",27017);
List<ServerAddress> addrs = new ArrayList<ServerAddress>();
addrs.add(serverAddress);
//MongoCredential.createScramSha1Credential()三个参数分别为 用户名 数据库名称 密码
MongoCredential credential = MongoCredential.createScramSha1Credential("username", "databaseName", "password".toCharArray());
List<MongoCredential> credentials = new ArrayList<MongoCredential>();
credentials.add(credential);
//通过连接认证获取MongoDB连接
client = new MongoClient(addrs,credentials);
} catch (Exception e) {
logger.info("需要认证的获取连接对象失败,{}",e);
}
}
/**
* 获取数据库对象
* @param databaseName 数据库名
* @return MongoDatabase
*/
public MongoDatabase getDatabase(String databaseName){
if(client == null){
mongoClient();
}
MongoDatabase database = client.getDatabase(databaseName);
return database;
}
}
查询数据
查询集合中所有数据
//获取工具类对象
MongoDBUtil util = MongoDBUtil.getInstance();
//获取指定数据库对象
MongoDatabase database = util.getDatabase("test");
//获取指定集合对象
MongoCollection<Document> haha = database.getCollection("haha");
//获取指定集合中所有文档(数据)
FindIterable<Document> documents = haha.find();
//1.直接遍历
for (Document document : documents) {
System.out.println("document = " + document);
}
//2.迭代器遍历
MongoCursor<Document> mongoCursor = documents.iterator();
while (mongoCursor.hasNext()){
System.out.println("iterator.document = " + mongoCursor.next());
}
//关闭mongodb连接对象
util.closeDB();
查询指定数据
BasicDBObject
多个筛选条件
1.获取符合多个筛选条件的所有数据
//筛选条件对象
BasicDBObject basicDBObject = new BasicDBObject();
//筛选条件1
basicDBObject.put("name","zhangsan");
//筛选条件2
basicDBObject.put("age",18);
//获取符合筛选条件的所有数据
FindIterable<Document> documents = haha.find(basicDBObject);
//迭代器遍历
MongoCursor<Document> mongoCursor = documents.iterator();
while (mongoCursor.hasNext()){
System.out.println("iterator.document = " + mongoCursor.next());
}
//关闭mongodb连接对象
util.closeDB();
2.获取符合多个筛选条件的第一条数据
//筛选条件对象
BasicDBObject basicDBObject = new BasicDBObject();
//筛选条件1
basicDBObject.put("name","zhangsan");
//筛选条件2
basicDBObject.put("age",18);
//获取指定数据
Document document = haha.find(basicDBObject).first();
System.out.println("document = " + document);
//关闭mongodb连接对象
util.closeDB();
单个筛选条件
单个就不举例了,都是一样的只是少了一行代码的问题
Filters
单个筛选条件
1.获取符合单个筛选条件的所有数据
//筛选条件对象
Bson bson = Filters.eq("name", "zhangsan");
//获取指定数据
FindIterable<Document> documents = haha.find(bson);
//迭代器遍历
MongoCursor<Document> cursor = documents.iterator();
while(cursor.hasNext()){
System.out.println("cursor.next() = " + cursor.next());
}
2.获取符合单个筛选条件的第一个数据
//筛选条件对象
Bson bson = Filters.eq("name", "zhangsan");
//获取指定数据
Document document = haha.find(bson).first();
System.out.println("document = " + document);
//关闭mongodb连接对象
util.closeDB();
多个筛选条件
1.获取符合多个筛选条件的所有数据
//筛选条件
List<Bson> list = new ArrayList<>();
list.add(Filters.eq("name","zhangsan"));
list.add(Filters.eq("age",18));
//筛选条件对象
Bson bson = Filters.and(list);
//获取指定数据
FindIterable<Document> documents = haha.find(bson);
//迭代器遍历
MongoCursor<Document> cursor = documents.iterator();
while(cursor.hasNext()){
System.out.println("cursor.next() = " + cursor.next());
}
2.获取符合多个筛选条件的第一个数据
//筛选条件
List<Bson> list = new ArrayList<>();
list.add(Filters.eq("name","zhangsan"));
list.add(Filters.eq("age",18));
//筛选条件对象
Bson bson = Filters.and(list);
//获取指定数据
Document document = haha.find(bson).first();
System.out.println("document = " + document);
//关闭mongodb连接对象
util.closeDB();
添加数据
添加单条数据
//一条文档中的字段信息和相对应的数据
Map<String,Object> map = new HashMap<>();
map.put("name","王五");
map.put("age",18);
map.put("sex","男");
//添加一条文档数据
Document document = new Document(map);
haha.insertOne(document);
//关闭mongodb连接对象
util.closeDB();
添加多条数据
//多条数据
List<Document> list = new ArrayList<>();
for (int i = 0; i < 3; i++) {
//一条文档中的字段信息和相对应的数据
Map<String,Object> map = new HashMap<>();
map.put("name","王五"+i);
map.put("age",18);
map.put("sex","男");
//添加文档数据
Document document = new Document(map);
list.add(document);
}
//添加多条数据
haha.insertMany(list);
//关闭mongodb连接对象
util.closeDB();
删除数据
删除单条数据
BasicDBObject
//筛选条件对象
BasicDBObject bson = new BasicDBObject();
bson.put("name","wangwu");
bson.put("age",25);
//删除单条数据
haha.deleteOne(bson);
//关闭mongodb连接对象
util.closeDB();
Filters
//筛选条件对象
Bson bson = Filters.eq("name", "zhangsan");
//删除单条数据
haha.deleteOne(bson);
//关闭mongodb连接对象
util.closeDB();
注意:当出现筛选条件查出多条数据时,只会删除符合条件的第一条(先后顺序),如以下代码
List<Bson> list = new ArrayList<>();
list.add(Filters.eq("name","zhangsan"));
list.add(Filters.eq("age",18));
//筛选条件对象
Bson bson = Filters.and(list);
haha.deleteOne(bson);
//关闭mongodb连接对象
util.closeDB();
删除多条数据
BasicDBObject
BasicDBObject bson = new BasicDBObject();
bson.put("name","lisi");
haha.deleteMany(bson);
//关闭mongodb连接对象
util.closeDB();
Filters
List<Bson> list = new ArrayList<>();
list.add(Filters.eq("name","zhangsan"));
list.add(Filters.eq("age",18));
//筛选条件对象
Bson bson = Filters.and(list);
haha.deleteMany(bson);
//关闭mongodb连接对象
util.closeDB();
更新数据
注意:在修改方法的参数中,第一个参数Bson表示筛选条件,第二个Bson表示修改的内容。
更新单条数据
BasicDBObject
//筛选条件对象
BasicDBObject filter = new BasicDBObject();
//筛选条件
filter.put("name","zhangsan");
filter.put("age","20");
//修改对象
Document document = new Document();
//添加修改内容
document.append("$set",new Document("sex","男"));
haha.updateOne(filter,document);
//关闭mongodb连接对象
util.closeDB();
Filters
//筛选条件
List<Bson> list = new ArrayList<>();
list.add(Filters.eq("name","zhangsan"));
list.add(Filters.eq("sex","男"));
//筛选条件对象
Bson filter = Filters.and(list);
//修改对象
Document doc = new Document();
doc.append("$set",new Document("age",20));
haha.updateOne(filter,doc);
//关闭mongodb连接对象
util.closeDB();
更新多条数据
BasicDBObject
//筛选条件
BasicDBObject filter = new BasicDBObject();
filter.put("name","zhangsan");
filter.put("age",55);
//修改对象
Document doc = new Document();
doc.append("$set",new Document("sex","女"));
haha.updateMany(filter,doc);
//关闭mongodb连接对象
util.closeDB();
Filter
//筛选条件
List<Bson> list = new ArrayList<>();
list.add(Filters.eq("name","zhangsan"));
list.add(Filters.eq("sex","男"));
//筛选条件对象
Bson filter = Filters.and(list);
//修改对象
Document doc = new Document();
doc.append("$set",new Document("age",55));
haha.updateMany(filter,doc);
//关闭mongodb连接对象
util.closeDB();