MongDB基础学习(六)—— 【MongoDB for Java】Java操作MongoDB

本文详细介绍如何使用Java进行MongoDB数据库的基本操作,包括环境搭建、依赖配置及CRUD操作等核心内容。

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

【MongoDB for Java】Java操作MongoDB

       开发的产品为了融资,不停得改版,从第一版到现在最新版本,最后发现公司发展方向都变了,有最初电子商务改成VR内容提供者(没办法,要别人钱,就得按照别人的规划的战略走)。本来本章节会放到后面再做讲解,无奈,部门需要做一次培训任务,我就想到拿Java操作MongoDB作为培训内容,开发环境和依赖jar如下:

  (1)开发环境:

System:Windows

IDE:eclipse

Database:mongoDB2.6

Maven:apache-maven-3.0.4

  (2)开发依赖库:

JavaEE7、mongo-2.6.5.jar、junit-4.11.jar

一、准备工作

        1、 首先,下载mongoDB对Java支持的驱动包(我是直接拿maven下载的,文章最后我也会把相应的mongo-2.6.5.jar上传。

MongoDBfor Java的API文档地址为:http://api.mongodb.org/java/2.6.5/

MongoDB for Java相关的操作实例代码:http://docs.mongodb.org/ecosystem/tutorial/getting-started-with-java-driver/

我这里创建的是Maven工程,其pom文件内容如下:

<span style="font-size:18px;"><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
    <modelVersion>4.0.0</modelVersion>  
    <groupId>com.hth</groupId>  
    <artifactId>mongodb</artifactId>  
    <packaging>war</packaging>  
    <version>0.0.1-SNAPSHOT</version>  
    <name>mongodb Maven Webapp</name>  
    <url>http://maven.apache.org</url>  
    <dependencies>  
        <dependency>  
            <groupId>junit</groupId>  
            <artifactId>junit</artifactId>  
            <version>4.11</version>  
            <scope>test</scope>  
        </dependency>  
  
        <dependency>  
            <groupId>org.mongodb</groupId>  
            <artifactId>mongo-java-driver</artifactId>  
            <version>2.6.5</version>  
        </dependency>  
    </dependencies>  
    <build>  
        <finalName>mongodb</finalName>  
    </build>  
</project></span>  

w plain  copy


     如果你的开发环境没有安装maven环境,你可以建立一个JavaProject工程,导入MongoDB的驱动jar包,即可在Java中使用mongoDB,

二、Java操作MongoDB示例

     在本示例之前你需要启动mongoDB的服务,启动后,下面的程序才能顺利执行;

   1、 建立MongoDBDemo.java,完成简单的mongoDB数据库操作       

               Mongomongo = new Mongo();

          这样就创建了一个MongoDB的数据库连接对象,它默认连接到当前机器的localhost地址,端口是27017。

               DB db = mongo.getDB(“test”);

         这样就获得了一个test的数据库(为mongoDB的默认的数据库),如果mongoDB中没有创建这个数据库也是可以正常运行的。得到了db,下一步我们要获取一个“聚集集合DBCollection”,通过db对象的getCollection方法来完成。

             DBCollection users = db.getCollection("users");

        这样就获得了一个DBCollection,它相当于我们数据库的“表”,在MongoDB中叫做集合。

       查询所有数据

          DBCursor cur = users.find();

          while (cur.hasNext()) {

                 System.out.println(cur.next());

          }

完整源码

<span style="font-size:18px;">package com.hth.mongodb;  
  
import java.net.UnknownHostException;  
import java.util.Iterator;  
  
import com.mongodb.DB;  
import com.mongodb.DBCollection;  
import com.mongodb.DBCursor;  
import com.mongodb.Mongo;  
import com.mongodb.MongoException;  
import com.mongodb.util.JSON;  
  
/** 
 * @ClassName: MongoDBDemo 
 * @Description: TODO(MongoDB测试) 
 * @author wangzhao date 2015年2月11日 下午3:56:16 
 *  
 */  
public class MongoDBDemo {  
  
    public static void main(String[] args) throws UnknownHostException,  
            MongoException {  
  
        Mongo mongo = new Mongo("192.168.26.190", 27017);  
        for (String dbName : mongo.getDatabaseNames()) {  
            System.out.println("数据库实例:" + dbName);  
        }  
        DB db = mongo.getDB("dreamerkr");  
        for (String cName : db.getCollectionNames()) {  
            System.out.println("dreamerkr存在的集合:" + cName);  
        }  
        DBCollection webInfo = db.getCollection("web_info");  
        DBCursor dbCursor = webInfo.find();  
        while (dbCursor.hasNext()) {  
            System.out.println("每个文档数据为:" + dbCursor.next());  
        }  
  
        for (Iterator it = dbCursor.iterator(); it.hasNext();) {  
            System.out.println("每个文档数据为:" + it.next());  
        }  
  
        System.out.println("文档个数为:" + dbCursor.count());  
  
        System.out.println("序列化此文档"+JSON.serialize(dbCursor));  
  
    }  
  
}</span>  
2、 完成CRUD操作,首先建立一个MongoDBCRUDTest.java,基本测试代码如下:
[java] view plain copy
<span style="font-size:18px;">package com.hth.mongodb;  
  
import java.net.UnknownHostException;  
  
import java.util.ArrayList;  
  
import java.util.List;  
  
import org.bson.types.ObjectId;  
  
import org.junit.After;  
  
import org.junit.Before;  
  
import org.junit.Test;  
  
import com.mongodb.BasicDBObject;  
  
import com.mongodb.DB;  
  
import com.mongodb.DBCollection;  
  
import com.mongodb.DBCursor;  
  
import com.mongodb.DBObject;  
  
import com.mongodb.Mongo;  
  
import com.mongodb.MongoException;  
  
import com.mongodb.QueryOperators;  
  
  
/** 
 * @ClassName: MongoDBCRUDTest 
 * @Description: TODO(MongoDB测试) 
 * @author wangzhao date 2015年2月11日 下午5:56:16 
 *  
 */  
public class MongoDBCRUDTest {  
  
     private Mongo mg = null;  
  
     private DB db;  
  
     private DBCollection webInfos;  
  
     @Before  
     public void init() {  
  
          try {  
               mg = new Mongo("192.168.26.190", 27017);  
  
          } catch (UnknownHostException e) {  
  
               e.printStackTrace();  
  
          } catch (MongoException e) {  
  
               e.printStackTrace();  
  
          }  
  
          // 获取dreamerkr DB;如果默认没有创建,mongodb会自动创建  
  
          db = mg.getDB("dreamerkr");  
  
          // 获取web_info DBCollection;如果默认没有创建,mongodb会自动创建  
  
          webInfos = db.getCollection("web_info");  
  
     }  
  
     @After  
     public void destory() {  
  
          if (mg != null) {  
               mg.close();  
          }  
          mg = null;  
  
          db = null;  
  
          webInfos = null;  
     }  
  
     public void print(Object o) {  
  
          System.out.println(o);  
  
     }  
  
     /** 
      * 1.queryAll(使用MongoDB的api查询所有数据). 
      */  
     @Test  
     public void queryAll() {  
  
          print("查询webInfos的所有数据:");  
  
          // db游标  
  
          DBCursor cur = webInfos.find();  
  
          while (cur.hasNext()) {  
  
               print(cur.next());  
  
          }  
  
     }  
       
     /** 
      * add(插入一个对象). 
      */  
     @Test  
     public void addObject() {  
  
          // 先查询所有数据  
  
          queryAll();  
  
          print("count: " + webInfos.count());  
  
          DBObject webInfo = new BasicDBObject();  
  
          webInfo.put("name", "追梦客");  
  
          webInfo.put("address", "http://www.dreamerkr.com");  
  
          // webInfos.save(webInfo)保存,getN()获取影响行数  
          print(webInfos.save(webInfo).getN());  
  
  
          // 查询下数据,看看是否添加成功  
         print("count: " + webInfos.count());  
  
          queryAll();  
  
     }  
     /** 
      * add(插入一个List). 
      */  
     @Test  
     public void addList() {  
          queryAll();  
          print("count: " + webInfos.count());  
  
          DBObject webInfo = new BasicDBObject();   
            
          List<DBObject> list = new ArrayList<DBObject>();  
  
          webInfo.put("name", "追梦客");  
            
          webInfo.put("address", "http://www.dreamerkr.com");  
            
          webInfo.put("age", 2);  
            
          list.add(webInfo);  
            
          DBObject webInfo2 = new BasicDBObject("name", "追梦客2");  
            
          webInfo2.put("address", "www.hth.tv");  
            
          webInfo2.put("age", 1);  
            
          list.add(webInfo2);  
  
          webInfos.insert(list);  
            
          // 查询下数据,看看是否添加成功  
          print("count: " + webInfos.count());  
            
          queryAll();  
     }  
     /** 
      * add(插入一个数组). 
      */  
     @Test  
     public void addArray() {  
  
          queryAll();  
  
          print("count: " + webInfos.count());  
  
          DBObject webInfo = new BasicDBObject();  
  
          webInfo.put("name", "追梦客");  
  
          webInfo.put("address", "http://www.dreamerkr.com");  
  
          // 添加多条数据,传递Array对象  
  
         webInfos.insert(webInfo, new BasicDBObject("name", "雨打排行"));  
  
          print("count: " + webInfos.count());  
  
          queryAll();  
  
     }  
       
       
     /** 
      *  
      * remove( 删除数据). 
      */  
     @Test  
     public void remove() {  
  
          queryAll();  
  
          print("删除id = 54dc0cc3c50afa2987800aff:"  
                    + webInfos.remove(new BasicDBObject("_id", new ObjectId(  
                                        "54dc0cc3c50afa2987800aff"))).getN());  
  
          print("remove name = 追梦客2: "  
                    + webInfos  
                              .remove(new BasicDBObject("name", "追梦客2")).getN());  
            
          print("remove age > 1: "  
                  + webInfos  
                            .remove(new BasicDBObject("age", new BasicDBObject("$gt", 1))).getN());  
  
     }  
  
     /** 
      *  
      * modify(修改数据). 
      */  
     @Test  
     public void modify() {  
            
          queryAll();  
           
          print("修改:"  
                    + webInfos.update(  
                              new BasicDBObject("_id", new ObjectId(  
                                        "54dc0808c50a5945720b1724")),  
                              new BasicDBObject("name", "雨打排行2")).getN());  
  
          print("修改:" + webInfos.update(new BasicDBObject("_id",   
                  new ObjectId("54dc130fc50a1c2e75e2b060")), new BasicDBObject("age", 122),  
                  true,// 如果数据库不存在,是否添加  
                  false //false只修改第一条,管理api上面说为true时是删掉多条,测试结果是多条数据不修改,感觉很奇怪,知道的朋友,请给我解释一下,谢谢  
                  ).getN());  
  
          // 当数据库不存在就不修改、不添加数据,当多条数据就不修改(通用的原因,知道的朋友,请给我解释一下,谢谢)  
           print("修改多条:" + webInfos.updateMulti(new BasicDBObject("name", "追梦客"), new BasicDBObject("name",  
                 "追梦客")).getN());  
            
          queryAll();  
  
     }  
  
     /** 
      *  
      * query( 查询数据). 
      */  
     @Test  
     public void query() {  
  
          // 查询id = 54dc130fc50a1c2e75e2b05c  
  
          print("find id = 54dc130fc50a1c2e75e2b05c: "  
                    + webInfos.find(  
                              new BasicDBObject("_id", new ObjectId(  
                                        "54dc130fc50a1c2e75e2b05c"))).toArray());  
  
          // 查询age = 122  
  
          print("find age = 122: "  
                    + webInfos.find(new BasicDBObject("age", 122)).toArray());  
  
          // 查询age >= 1  
  
          print("find age >= 1: "  
                    + webInfos  
                              .find(new BasicDBObject("age", new BasicDBObject(  
                                        "$gte", 1))).toArray());  
  
          print("find age <= 2: "  
                    + webInfos  
                              .find(new BasicDBObject("age", new BasicDBObject(  
                                        "$lte", 2))).toArray());  
  
          print("查询age!=3:"  
                    + webInfos.find(  
                              new BasicDBObject("age", new BasicDBObject("$ne", 3)))  
                              .toArray());  
  
          print("查询age in 1/122:"  
                    + webInfos.find(  
                              new BasicDBObject("age", new BasicDBObject(  
                                        QueryOperators.IN, new int[] { 1, 122})))  
                              .toArray());  
  
          print("查询age not in 1/2/122:"  
                    + webInfos.find(  
                              new BasicDBObject("age", new BasicDBObject(  
                                        QueryOperators.NIN, new int[] { 1, 2, 122 })))  
                              .toArray());  
  
          print("查询age exists 排序:"  
                    + webInfos.find(  
                              new BasicDBObject("age", new BasicDBObject(  
                                        QueryOperators.EXISTS, true))).toArray());  
  
          print("只查询age属性:"  
                    + webInfos.find(null, new BasicDBObject("age", true)).toArray());  
  
          // 只查询一条数据,多条去第一条  
  
          print("findOne: " + webInfos.findOne());  
  
          print("findOne: " + webInfos.findOne(new BasicDBObject("age", 1)));  
  
          print("findOne: "  
                    + webInfos.findOne(new BasicDBObject("age", 1),  
                              new BasicDBObject("name", true)));  
  
          // 查询修改、删除  
  
          print("findAndRemove 查询age=2的数据,并且删除: "  
                    + webInfos.findAndRemove(new BasicDBObject("age", 2)));  
  
          // 查询age=1的数据,并且修改name的值为好童话  
  
          print("findAndModify: "  
                    + webInfos.findAndModify(new BasicDBObject("age", 1),  
                              new BasicDBObject("name", "好童话")));  
          queryAll();  
  
     }  
}</span>  

       好了,这里基本上就介绍这么多Java操作MongoDB的方法。其他的东西还需要你自己多多研究。上面操作MongoDB的方法都是一些常用的方法,比较简单。如果有什么问题,可以给我留言,谢谢!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值