Java操作MongoDB

本文介绍如何使用Java驱动程序连接并操作MongoDB数据库。主要内容包括安装驱动程序、连接数据库、执行增删改查操作及创建索引等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://www.mongodb.org/display/DOCS/Java+Tutorial  


  Java驱动程序是MongoDB中的驱动程序之一,也是比较成熟的Mongodb驱动程序之一,下面介绍了使用java连接、操作Mongodb。

          一、安装java驱动程序

                 Mongodb的java驱动程序是一个jar包,可以在:https://github.com/mongodb/mongo-java-driver/downloads 下载,下载的jar导入到eclipse的项目中即可。

          二、java操作Mongodb

                 java操作Mongodb常用的几个类:

                Mongo:连接服务器,执行一些数据库操作的选项,如新建立一个数据库等

                DB:对应一个数据库,可以用来建立集合等操作

                DBCollection:对应一个集合(类似表),可能是我们用得最多的,可以添加删除记录等

                DBObject接口和BasicDBObject对象:表示一个具体的记录,BasicDBObject实现了DBObject,是key-value的数据结构,用起来和HashMap是基本一致的。

                DBCursor:用来遍历取得的数据,实现了Iterable和Iterator

 

[java]  view plain  copy
 print ?
  1. private static void mongodbOperating(){  
  2.         try {  
  3.             //有多种构造方法,选择一种(IP、port)  
  4.             Mongo m = new Mongo( "192.168.21.111" , 27017 );  
  5.             //选择数据库,如果没有这个数据库的话,会自动建立  
  6.             DB  db = m.getDB( "mydb" );  
  7.   
  8.             //建立一个集合,和数据库一样,如果没有,会自动建立  
  9.             DBCollection collection = db.getCollection("myCollectionTest");  
  10.               
  11.             BasicDBObject doc = new BasicDBObject();  
  12.             doc.put("name""MongoDB");  
  13.             doc.put("type""database");  
  14.             doc.put("count"1);  
  15.   
  16.             BasicDBObject info = new BasicDBObject();  
  17.             info.put("x"203);  
  18.             info.put("y"102);  
  19.             doc.put("info", info);  
  20.   
  21.             //插入一条数据,数据如下  
  22.             // {  
  23.             //     "name" : "MongoDB",  
  24.             //     "type" : "database",  
  25.             //     "count" : 1,  
  26.             //     "info" : {  
  27.             //                 x : 203,  
  28.             //                 y : 102  
  29.             //               }  
  30.             //  }  
  31.             // 可以循环插入多条数据  
  32.             collection.insert(doc);  
  33.             //查找第一条数据,显示如下,_id是系统自动帮加上的,全局唯一  
  34.             //{ "_id" : "49902cde5162504500b45c2c" , "name" : "MongoDB" , "type" : "database" , "count" : 1 , "info" : { "x" : 203 , "y" : 102}}  
  35.             DBObject myDoc = collection.findOne();  
  36.             System.out.println(myDoc);  
  37.               
  38.             //插入多条数据  
  39.             for (int i=0; i < 100; i++) {  
  40.                 collection.insert(new BasicDBObject().append("i", i));  
  41.             }  
  42.   
  43.               
  44.             //获取文档条数  
  45.             System.out.println(collection.getCount());  
  46.               
  47.             //使用Cursor 获取所有文档  
  48.             DBCursor cursor = collection.find();  
  49.             try {  
  50.                 while(cursor.hasNext()) {  
  51.                     System.out.println(cursor.next());  
  52.                 }  
  53.             } finally {  
  54.                 cursor.close();  
  55.             }  
  56.               
  57.             //查找操作,获取单条记录  
  58.             //{ "_id" : "49903677516250c1008d624e" , "i" : 71 }  
  59.             BasicDBObject query = new BasicDBObject();  
  60.             query.put("i"71);  
  61.             cursor = collection.find(query);  
  62.             try {  
  63.                 while(cursor.hasNext()) {  
  64.                     System.out.println(cursor.next());  
  65.                 }  
  66.             } finally {  
  67.                 cursor.close();  
  68.             }  
  69.   
  70.             //查找 i>50的项  
  71.             query = new BasicDBObject();  
  72.             query.put("i"new BasicDBObject("$gt"50));  // e.g. find all where i > 50  
  73.             cursor = collection.find(query);  
  74.             try {  
  75.                 while(cursor.hasNext()) {  
  76.                     System.out.println(cursor.next());  
  77.                 }  
  78.             } finally {  
  79.                 cursor.close();  
  80.             }  
  81.   
  82.   
  83.             //查找 20<i<=30  
  84.             query = new BasicDBObject();  
  85.             query.put("i"new BasicDBObject("$gt"20).append("$lte"30));  // i.e.   20 < i <= 30  
  86.             cursor = collection.find(query);  
  87.             try {  
  88.                 while(cursor.hasNext()) {  
  89.                     System.out.println(cursor.next());  
  90.                 }  
  91.             } finally {  
  92.                 cursor.close();  
  93.             }  
  94.   
  95.             //修改 i=71的一项  
  96.             query = new BasicDBObject();  
  97.             query.put("i"71);  
  98.             BasicDBObject update = new BasicDBObject();  
  99.             update.put("i"710);  
  100.             DBObject dbobj = collection.findAndModify(query, update);  
  101.             System.out.println(dbobj);  
  102.               
  103.             //修改 i=72的一项  
  104.             query = new BasicDBObject();  
  105.             query.put("i"72);  
  106.             update = new BasicDBObject();  
  107.             update.put("i"720);  
  108.             WriteResult result = collection.update(query, update);  
  109.             System.out.println(result);  
  110.               
  111.             //删除i=61的项  
  112.             query = new BasicDBObject();  
  113.             query.put("i"61);  
  114.             collection.findAndRemove(query);  
  115.             //删除i=62的项  
  116.             BasicDBObject remove = new BasicDBObject();  
  117.             remove.put("i"62);  
  118.             collection.remove(remove);  
  119.               
  120.             //创建索引 1为升序、-1为降序  
  121.             collection.createIndex(new BasicDBObject("i"1));  // create index on "i", ascending  
  122.   
  123.             //获取索引列表  
  124.             List<DBObject> list = collection.getIndexInfo();  
  125.             for (DBObject o : list) {  
  126.                 System.out.println(o);  
  127.             }  
  128.   
  129.             //获取数据库列表  
  130.             for (String s : m.getDatabaseNames()) {  
  131.                 System.out.println(s);  
  132.             }  
  133.             //获取集合列表  
  134.             Set<String> colls = db.getCollectionNames();  
  135.             for (String s : colls) {  
  136.                 System.out.println(s);  
  137.             }  
  138.   
  139.             //删除数据库  
  140.             //m.dropDatabase("my_new_db");  
  141.               
  142.   
  143.         } catch (UnknownHostException e) {  
  144.             // TODO Auto-generated catch block  
  145.             e.printStackTrace();  
  146.         }  
  147.     }  
### Java 操作 MongoDB 的基础 为了实现对MongoDB操作,在Java程序中通常会引入`mongodb-driver-sync`库。此库提供了同步驱动器,允许开发者执行基本的CRUD操作以及更复杂的查询。 #### 创建连接并获取数据库实例 建立与MongoDB服务器的连接是任何交互的第一步。这可以通过`MongoClients.create()`方法完成,该方法返回一个表示客户端连接的对象。对于本地运行的服务,默认情况下监听27017端口[^2]: ```java import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; // 创建一个新的 MongoClient 实例用于连接默认地址 (localhost) 和端口 (27017) MongoClient mongoClient = MongoClients.create(); ``` 接着可以利用获得的客户端对象调用`getDatabase(String dbName)`函数来选定特定名称下的数据库作为工作区: ```java com.mongodb.client.MongoDatabase database = mongoClient.getDatabase("test"); ``` #### 执行 CRUD 操作 ##### 插入文档 向集合内添加新记录涉及构建BSON格式的数据结构并通过适当的方法提交给目标集合。下面的例子展示了怎样往名为“users”的集合里加入一条新的用户信息[^3]: ```java import org.bson.Document; public void insertUser() { Document userDoc = new Document("name", "Alice").append("age", 30); database.getCollection("users").insertOne(userDoc); } ``` ##### 查询文档 检索已存数据同样依赖于Document类定义条件表达式,并传递至find()或findOneAndDelete()等查找接口。这里给出一段简单的代码片段用来展示如何读取所有用户的姓名列表: ```java for (Document doc : database.getCollection("users").find()) { System.out.println(doc.getString("name")); } ``` ##### 更新现有条目 当需要修改某些字段的内容时,则应该准备更新指令连同匹配模式一起交给updateMany()或者replaceOne()这样的命令处理。下述例子说明了更改年龄大于等于30岁的所有人职业为工程师的过程[^5]: ```java database.getCollection("users") .updateMany( Filters.gte("age", 30), Updates.set("job", "engineer") ); ``` ##### 删除指定项 最后如果想要移除符合条件的一条或多条记录,可借助deleteOne()或是deleteMany()来进行相应设置。比如删除名字叫Bob的所有条目的方式如下所示: ```java database.getCollection("users").deleteMany(new Document("name", "Bob")); ``` 以上就是关于使用Java语言控制MongoDB的一些基础知识和技术要点概述[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值