大数据学习栈记——MongoDB编程

张开发
2026/5/5 1:18:48 15 分钟阅读
大数据学习栈记——MongoDB编程
本文介绍NoSQL技术MongoDB用Java来连接数据库执行常见的数据库操作使用环境IntelliJ IDEA、Ubuntu24.04。配置Maven我们需要使用“MongoDB Driver”所以先打开“MongoDB Java Driver”项目但是提示说这个项目已经不维护了被“mongodb-driver-sync”这个项目替代了我们根据链接跳转到“mongodb-driver-sync”项目这个项目的名称显示为“MongoDB Driver”在maven项目的pom.xml文件中添加依赖!-- https://mvnrepository.com/artifact/org.mongodb/mongodb-driver-sync -- dependency groupIdorg.mongodb/groupId artifactIdmongodb-driver-sync/artifactId version5.0.1/version /dependency点击右侧的Maven展开Dependencies可以看到新的一个mongodb的依赖包已经导入进来了与MongoDB建立连接Java模式首先在项目中建立一个”mongodb”的包编写一个类测试一下MongoDB能否连通。MongoClient mongoClient new MongoClient(192.168.70.150, 27017); //这种方法已经淘汰重写写一个类来完成Mongdb的连接测试。但是MongoDB如果直接连由于安全问题会访问拒绝我们需要在Ubuntu中配置关闭防火墙同时还需要配置mongodb允许远程使用默认为仅本地访问才能从远程访问。执行下列代码sudo vim /etc/mongod.conf把bindIp修改为0.0.0.0然后保存在nosql这台虚拟机上执行下列代码来重启mongodb服务sudo service mongod restart执行代码package MongoDB; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; // import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; public class TestMongoDB { public static void main(String[] args) { String uri mongodb://192.168.179.143:27017; // 数据库连接uri try (MongoClient mongoClient MongoClients.create(uri)) { MongoDatabase database mongoClient.getDatabase(school1); // 创建数据库school1 database.createCollection(teacher); // 创建集合teacher System.out.println(集合创建成功); } } }显示集合创建成功在nosql这台虚拟机的shell模式下查看发现school1数据库和集合teacher都已经创建成功说明(1在Java 源代码中Java tryO0用法中括号(的作用属于Java7的新特性。经常会用try-catch来捕获有可能抛出异常的代码。如果其中还涉及到资源的使用的话最后在finally块中显示的释放掉有可能被占用的资源。但是如果资源类已经实现了AutoCloseable这个接口的话可以在 tryO括号中可以写操作资源的语句(IO操作)会在程序块结束时自动释放掉占用的资源不用再在finally块中手动释放了。原文链接https://blog.csdn.net/qq_25112523/article/details/124746116在MongoDB中新增数据在MongoDB中新增数据有两种方法第一种是增加一条数据文档第二种是增加多条数据文档。方法一增加一条数据文档package MongoDB; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; import com.mongodb.client.MongoDatabase; import com.mongodb.client.MongoCollection; import com.mongodb.client.result.InsertOneResult; import com.mongodb.MongoException; import org.bson.Document; import org.bson.types.ObjectId; import java.util.Arrays; public class InsertOne { public static void main(String[] args) { String uri mongodb://192.168.179.143:27017; // 数据库连接uri try (MongoClient mongoClient MongoClients.create(uri)) { MongoDatabase database mongoClient.getDatabase(school1); MongoCollectionDocument collection database.getCollection(teacher); try { // 在集合teacher中增加一条数据 InsertOneResult result collection.insertOne(new Document() .append(_id, new ObjectId()) .append(name, zhangsan) .append(course, Arrays.asList(Big Data Technology, Web Front-end Programming))); // 输出新增的文档内容 System.out.println(成功! 新增文档的id: result.getInsertedId()); // 如果出现异常则打印该异常 } catch (MongoException me) { System.err.println(Unable to insert due to an error: me); } } } }在Shell中查询方法二增加多条数据文档package MongoDB; import java.util.Arrays; import java.util.List; import org.bson.Document; import com.mongodb.MongoException; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import com.mongodb.client.result.InsertManyResult; public class InsertMany { public static void main(String[] args) { String uri mongodb://192.168.179.143:27017; // 数据库连接uri try (MongoClient mongoClient MongoClients.create(uri)) { MongoDatabase database mongoClient.getDatabase(school1); MongoCollectionDocument collection database.getCollection(teacher); // 创建两个包含name和age属性的文档,注意这里和InsertOne的格式不同这并没有什么关系 ListDocument teacherList Arrays.asList( new Document().append(name, Alice).append(age, 30), new Document().append(name, Bob).append(age, 40)); try { // 把文档增加到teacher集合中 InsertManyResult result collection.insertMany(teacherList); // 打印返回的id值 System.out.println(新增文档的id值: result.getInsertedIds()); // 如果出现异常则打印该异常 } catch (MongoException me) { System.err.println(Unable to insert due to an error: me); } } } }在Shell中查询在MongoDB中查询数据在MongoDB中查询数据有两种方法第一种是查询一条数据文档第二种是查询多条数据文档。方法一查询一条数据文档package MongoDB; import static com.mongodb.client.model.Filters.eq; import org.bson.Document; import org.bson.conversions.Bson; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import com.mongodb.client.model.Projections; import com.mongodb.client.model.Sorts; public class FindOne { public static void main(String[] args) { String uri mongodb://192.168.179.143:27017; // 数据库连接uri try (MongoClient mongoClient MongoClients.create(uri)) { MongoDatabase database mongoClient.getDatabase(school1); MongoCollectionDocument collection database.getCollection(teacher); // 先把有name属性的文档过滤出来 Bson projectionFields Projections.fields( Projections.include(name), Projections.excludeId()); // 返回满足条件的第一个文档 Document doc collection.find(eq(name, zhangsan)) .projection(projectionFields) .sort(Sorts.descending(name)) .first(); // 没有找到则告之未找到,否则把该文档用JSON格式输出 if (doc null) { System.out.println(没有找到文档); } else { System.out.println(doc.toJson()); } } } }方法二查询多条数据文档package MongoDB; import static com.mongodb.client.model.Filters.lt; import org.bson.Document; import org.bson.conversions.Bson; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCursor; import com.mongodb.client.MongoDatabase; import com.mongodb.client.model.Projections; import com.mongodb.client.model.Sorts; public class Find { public static void main(String[] args) { String uri mongodb://192.168.179.143:27017; // 数据库连接uri try (MongoClient mongoClient MongoClients.create(uri)) { MongoDatabase database mongoClient.getDatabase(school1); MongoCollectionDocument collection database.getCollection(teacher); // 先把有name和age属性的文档过滤出来 Bson projectionFields Projections.fields( Projections.include(name, age), Projections.excludeId()); // 找到符合条件的文档,这里查询条件为年龄小于50岁并用name逆序排列 // 把查询结果用JSON格式打印出来 try (MongoCursorDocument cursor collection.find(lt(age, 50)) .projection(projectionFields) .sort(Sorts.descending(name)).iterator()) { while (cursor.hasNext()) { System.out.println(cursor.next().toJson()); } } } } }在MongoDB中更新数据在MongoDB中更新数据有两种方法第一种是更新一条数据文档第二种是更新多条数据文档。方法一更新一条数据文档package MongoDB; import org.bson.Document; import org.bson.conversions.Bson; import com.mongodb.MongoException; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import com.mongodb.client.model.UpdateOptions; import com.mongodb.client.model.Updates; import com.mongodb.client.result.UpdateResult; public class UpdateOne { public static void main(String[] args) { String uri mongodb://192.168.179.143:27017; // 数据库连接uri try (MongoClient mongoClient MongoClients.create(uri)) { MongoDatabase database mongoClient.getDatabase(school1); MongoCollectionDocument collection database.getCollection(teacher); Document query new Document().append(name, Alice); // 更新文档的三个值,age是已经存在的属性gender是新增的属性currentTimestamp是新增的更新时间属性 Bson updates Updates.combine( Updates.set(age, 31), Updates.addToSet(gender, Male), Updates.currentTimestamp(lastUpdated)); // 如何没有找到符合查询条件的记录则新增该记录 UpdateOptions options new UpdateOptions().upsert(true); try { // 更新符合条件的第一个文档 UpdateResult result collection.updateOne(query, updates, options); // 打印文档的属性 System.out.println(修改文档的数据是: result.getModifiedCount()); System.out.println(被修改的文档ID是: result.getUpsertedId()); // 如果出现异常则打印该异常 } catch (MongoException me) { System.err.println(无法更新异常是: me); } } } }程序这边有一定问题在Shell中查询无问题发现Alice这条数据已经被更新了。方法二更新多条数文档package MongoDB; import static com.mongodb.client.model.Filters.gt; import org.bson.Document; import org.bson.conversions.Bson; import com.mongodb.MongoException; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import com.mongodb.client.model.Updates; import com.mongodb.client.result.UpdateResult; public class UpdateMany { public static void main(String[] args) { String uri mongodb://192.168.179.143:27017; // 数据库连接uri try (MongoClient mongoClient MongoClients.create(uri)) { MongoDatabase database mongoClient.getDatabase(school1); MongoCollectionDocument collection database.getCollection(teacher); // 查询条件是年龄大于30 Bson query gt(age, 30); // 更新文档的属性 Bson updates Updates.combine( Updates.addToSet(interests, programming), Updates.currentTimestamp(lastUpdated)); try { // 更新文档数据 UpdateResult result collection.updateMany(query, updates); // 答应更新结果 System.out.println(更新文档的个数: result.getModifiedCount()); // 如果出现异常则打印该异常 } catch (MongoException me) { System.err.println(Unable to update due to an error: me); } } } }在Shell中查询发现Alice和Bob这两条数据已经被更新了。在更新操作中还有一类程序时把一个文档全部替换掉你可以参考一下官方文档https://www.mongodb.com/docs/drivers/java/sync/current/usage-examples/replaceOne/在MongoDB中删除数据Java模式在MongoDB中删除数据有两种方法第一种是删除一条数据文档第二种是删除多条数据文档。方法一删除一条数据文档package MongoDB; import static com.mongodb.client.model.Filters.eq; import org.bson.Document; import org.bson.conversions.Bson; import com.mongodb.MongoException; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import com.mongodb.client.result.DeleteResult; public class DeleteOne { public static void main(String[] args) { String uri mongodb://192.168.179.143:27017; // 数据库连接uri try (MongoClient mongoClient MongoClients.create(uri)) { MongoDatabase database mongoClient.getDatabase(school1); MongoCollectionDocument collection database.getCollection(teacher); Bson query eq(name, zhangsan); try { // 删除满足条件的第一个文档 DeleteResult result collection.deleteOne(query); System.out.println(删除文档个数: result.getDeletedCount()); // 如果出现异常则打印该异常 } catch (MongoException me) { System.err.println(Unable to delete due to an error: me); } } } }在Shell中查询方法二删除多条数据文档package MongoDB; import static com.mongodb.client.model.Filters.lt; import org.bson.Document; import org.bson.conversions.Bson; import com.mongodb.MongoException; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import com.mongodb.client.result.DeleteResult; public class DeleteMany { public static void main(String[] args) { String uri mongodb://192.168.179.143:27017; // 数据库连接uri try (MongoClient mongoClient MongoClients.create(uri)) { MongoDatabase database mongoClient.getDatabase(school1); MongoCollectionDocument collection database.getCollection(teacher); Bson query lt(age, 50); try { // 删除所有年龄小于50的问句 DeleteResult result collection.deleteMany(query); // 打印删除文档的数量 System.out.println(Deleted document count: result.getDeletedCount()); // 如果出现异常则打印该异常 } catch (MongoException me) { System.err.println(Unable to delete due to an error: me); } } } }在Shell中查询teacher集合中已经没有数据了因为一个三条数据第一次删除一条数据文档的那个程序删了1条第二次删了2条删除多条数据文档的那个程序所以就全部删光了

更多文章