1.声明
由于前面使用了python操作的MongoDB数据库,本人现在使用Java方式实现对当前的数据库的操作,在用于记录操作!
2.当前的pom依赖
<dependencies>
<!-- https://mvnrepository.com/artifact/org.mongodb/mongo-java-driver -->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.12.0</version>
</dependency>
</dependencies>
3.连接以及查询操作
由于python中使用的是MongoClient,所以本人查看是否存在这个类(存在),以及使用这个类
private final String HOST = "localhost";
private final int POST = 27017;
public MongoClient getMongoClient() {
return new MongoClient(HOST, POST);
}
public static void main(String[] args) {
}
// 用于测试当前的对MongoDB数据库的查询操作
@Test
public void testFindOption() {
MongoClient mongoClient = getMongoClient();
try {
Assert.notNull(mongoClient, "当前获取的client不能为空");
// 和python中相同的需要使用list方式显示所有的数据库名称
System.out.println("输出所有的数据库名字");
// MongoClientOptions mongoClientOptions = mongoClient.getMongoClientOptions();
MongoIterable<String> listDatabaseNames = mongoClient.listDatabaseNames();
CollectionUtils.printCollectionItem(listDatabaseNames);
// 获取当前的数据库
MongoDatabase db = mongoClient.getDatabase("db1");
// 通过当前的数据库获取当前的集合
MongoCollection<Document> testCollection = db.getCollection("test");
// 通过当前的集合对象获取文档
System.out.println("用于查看当前的test中的所有的数据");
FindIterable<Document> allDocuments = testCollection.find();
CollectionUtils.printCollectionItem(allDocuments);
// 查询第一个数据
System.out.println("开始获取当前的数据结果,查询_id为1的数据:");
allDocuments = testCollection.find(Filters.eq("_id", 1));
CollectionUtils.printCollectionItem(allDocuments);
// 可以使用Filters实现当前的查询操作
} finally {
mongoClient.close();
}
}
结果:
4.添加数据操作
// 用于测试添加数据的操作
@Test
public void testAddOption() {
MongoClient mongoClient = getMongoClient();
try {
// 添加数据库
MongoDatabase javaDB = mongoClient.getDatabase("javaDB");
// 在当前的数据库中添加test集合
javaDB.createCollection("test");
MongoCollection<Document> testCollection = javaDB.getCollection("test");
// 添加文档数据
System.out.println("添加单条数据==================");
Map<String, Object> zsMap = new HashMap<String, Object>();
zsMap.put("name", "张三");
zsMap.put("age", 18);
Document zs = new Document(zsMap);
testCollection.insertOne(zs);
System.out.println("添加多条数据=================");
List<Document> documents=new ArrayList<Document>();
Map<String, Object> lsMap = new HashMap<String, Object>();
lsMap.put("name", "李四");
lsMap.put("age", 20);
Document ls = new Document(lsMap);
Map<String, Object> wwMap = new HashMap<String, Object>();
wwMap.put("name", "王五");
wwMap.put("age", 22);
Document ww = new Document(wwMap);
documents.add(ls);
documents.add(ww);
testCollection.insertMany(documents);
} finally {
if (mongoClient != null)
mongoClient.close();
}
}
结果:
5.修改数据操作
// 测试当前的数据的更新操作
@Test
public void testUpdateOption() {
MongoClient mongoClient = getMongoClient();
try {
MongoDatabase javaDB = mongoClient.getDatabase("javaDB");
MongoCollection<Document> testCollection = javaDB.getCollection("test");
// 修改当前的名字为张三的年龄为16岁//
// UpdateResult updateOne = testCollection.updateOne(Filters.eq("name",
// "张三"),Updates.set("age",16));
// System.out.println(updateOne.getModifiedCount());
// 发现当前的UpdateOne的时候只能修改记录信息,如果出现需要修改多个信息就会出现问题
// 使用多条更新
// 将当前名字为张三的名字改为张三Update,年龄修改为20
// List<Bson> updateList = new ArrayList<Bson>();
// updateList.add(Updates.set("name", "张三Update"));
// updateList.add(Updates.set("age", 22));
// UpdateResult updateResult = testCollection.updateOne(Filters.eq("name", "张三"), updateList);
// System.out.println("当前更新的条数为:" + updateResult.getModifiedCount());
// 更新成功,所以建议使用当前的List方式实现当前的更新操作,如果使用一个可能出现问题
// 使用当前的批量更新数据,将所有年龄大于21岁数据中将年龄设置为18
UpdateResult updateMany = testCollection.updateMany(Filters.gt("age", 21), Updates.set("age", 18));
System.out.println("当前更新的条数:" + updateMany.getModifiedCount());
} finally {
if (mongoClient != null)
mongoClient.close();
}
}
上面执行的结果就不显示了!
6.删除数据操作
// 测试当前的删除操作
@Test
public void testDeleteOption() {
MongoClient mongoClient = getMongoClient();
try {
MongoDatabase javaDB = mongoClient.getDatabase("javaDB");
MongoCollection<Document> testCollection = javaDB.getCollection("test");
// 删除当前的名字为张三的数据
testCollection.deleteOne(Filters.eq("name", "张三"));
// 删除年龄大于18的所有数据
testCollection.deleteMany(Filters.gt("age", 18));
} finally {
if (mongoClient != null)
mongoClient.close();
}
}
结果:
7.总结
1.当前的Java对当前的MongoDB数据操作和python操作基本上差不多
2.java操作的时候添加数据为一个Map集合数据,查询的时候就需要使用Filters这个进行操作
3.修改数据的时候需要注意,如果修改一条数据为updateOne(Filters,Updates)
,如果是修改多条数据使用,updateMany(Filters,Updates)
,注意如果需要修改多个内容可以使用重载的updateXXX(Filters,List< Bson >)其中Bson的实际类型为Updates
4.删除数据操作和Python差不多
以上纯属个人见解,如有问题请联系本人!