设为首页 收藏本站
查看: 1648|回复: 0

[经验分享] MongoDB for Java】Java操作MongoDB

[复制链接]

尚未签到

发表于 2015-11-11 07:00:13 | 显示全部楼层 |阅读模式
  http://www.cnblogs.com/sourire/archive/2010/07/07/1772798.html
  http://www.cnblogs.com/hoojo/archive/2011/06/02/2068665.html

MongoDB 安装与启动

主要介绍在Windows
Linux 下的安装与启动
下载链接:http://www.mongodb.org/display/DOCS/Downloads
-----------------------------------------------------------------------------------
Windows
推荐下载版本1.4.3(Windows 32 bit)
下载链接:http://downloads.mongodb.org/win32/mongodb-win32-i386-1.4.3.zip
假设安装路径在E:\mongodb,设置Mongodb数据库的数据路径E:\data\mongodb
开启命令行(开始——运行)
输入以下命令:
1. mongod命令建立一个mongodb数据库链接,数据存放路径为E:\data\mongodb  E:
  cd mongodb\bin
  mongod.exe –port 11111 –dbpath E:\data\mongodb
  
  
  2.链接已有的mongodb数据库
  E:
  cd mongodb\bin

  mongo.exe 192.168.135.212:10001
  

-----------------------------------------------------------------------------------
Linux
推荐下载版本1.4.3
下载链接:http://downloads.mongodb.org/linux/mongodb-linux-i686-1.4.3.tgz
输入以下命令:
解压:tar -zxvf mongodb-linux-i686-1.4.3.tgz
定位到mongodb/bin目录中 cd ../mongodb/bin
1. mongod命令建立一个mongodb数据库链接,端口号为10001,数据存放路径为/data/mongodb/data,日志存放路径为/data/mongodb/log
先建立相关目录及文件,使用mkdir 及touch
启动命令——
./mongodb/bin/mongod -port 10001 -dbpath /data/mongodb/data/m1 --logpath/data/mongodb/log/m1.log
2.链接已有的mongodb数据库
./mongodb/bin/mongo 192.168.135.212:10001
Windows 和 Linux 安装有些异同,但链接数据库后,使用一样。
查询所有数据库show dbs
使用test数据库use test
显示test所有表(collections)show collections
查询服务器状态db.serverStatus()  上一篇文章:
http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html介绍到了在MongoDB的控制台完成MongoDB的数据操作,通过前一篇文章我们对MongoDB有了全面的认识和理解。现在我们就用Java来操作MongoDB的数据。

  
  开发环境:
  System:Windows
  IDE:eclipse、MyEclipse 8
  Database:mongoDB
  开发依赖库:
  JavaEE5、mongo-2.5.3.jar、junit-4.8.2.jar
  Email:hoojo_@126.com
  Blog:http://blog.iyunv.com/IBM_hoojo

  http://hoojo.cnblogs.com/

  

一、准备工作
  
  
  1、 首先,下载mongoDB对Java支持的驱动包
  驱动包下载地址:https://github.com/mongodb/mongo-java-driver/downloads

  mongoDB对Java的相关支持、技术:http://www.mongodb.org/display/DOCS/Java+Language+Center

  驱动源码下载:https://download.github.com/mongodb-mongo-java-driver-r2.6.1-7-g6037357.zip

  在线查看源码:https://github.com/mongodb/mongo-java-driver

  2、 下面建立一个JavaProject工程,导入下载下来的驱动包。即可在Java中使用mongoDB,目录如下:
DSC0000.jpg




二、Java操作MongoDB示例
  
  
  在本示例之前你需要启动mongod.exe的服务,启动后,下面的程序才能顺利执行;
  
  1、 建立SimpleTest.java,完成简单的mongoDB数据库操作
  Mongo mongo = new Mongo();
  这样就创建了一个MongoDB的数据库连接对象,它默认连接到当前机器的localhost地址,端口是27017。
  DB db = mongo.getDB(“test”);
  这样就获得了一个test的数据库,如果mongoDB中没有创建这个数据库也是可以正常运行的。如果你读过上一篇文章就知道,mongoDB可以在没有创建这个数据库的情况下,完成数据的添加操作。当添加的时候,没有这个库,mongoDB会自动创建当前数据库。

  得到了db,下一步我们要获取一个“聚集集合DBCollection”,通过db对象的getCollection方法来完成。
  DBCollection users = db.getCollection("users");
  这样就获得了一个DBCollection,它相当于我们数据库的“表”。
  查询所有数据
  DBCursor cur = users.find();
  while (cur.hasNext()) {
  System.out.println(cur.next());
  }
  
  完整源码

package com.hoo.test;

import java.net.UnknownHostException;
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;

/**
* <b>function:</b>MongoDB 简单示例
* @author hoojo
* @createDate 2011-5-24 下午02:42:29
* @file SimpleTest.java
* @package com.hoo.test
* @project MongoDB
* @blog http://blog.iyunv.com/IBM_hoojo
* @email hoojo_@126.com
* @version 1.0
*/
public class SimpleTest {

    public static void main(String[] args) throws UnknownHostException, MongoException {
        Mongo mg = new Mongo();
        //查询所有的Database
        for (String name : mg.getDatabaseNames()) {
            System.out.println(&quot;dbName: &quot; &#43; name);
        }
        
        DB db = mg.getDB(&quot;test&quot;);
        //查询所有的聚集集合
        for (String name : db.getCollectionNames()) {
            System.out.println(&quot;collectionName: &quot; &#43; name);
        }
        
        DBCollection users = db.getCollection(&quot;users&quot;);
        
        //查询所有的数据
        DBCursor cur = users.find();
        while (cur.hasNext()) {
            System.out.println(cur.next());
        }
        System.out.println(cur.count());
        System.out.println(cur.getCursorId());
        System.out.println(JSON.serialize(cur));
    }
}
  
  
  
  2、 完成CRUD操作,首先建立一个MongoDB4CRUDTest.java,基本测试代码如下:

package com.hoo.test;

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.Bytes;
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;
import com.mongodb.util.JSON;

/**
* <b>function:</b>实现MongoDB的CRUD操作
* @author hoojo
* @createDate 2011-6-2 下午03:21:23
* @file MongoDB4CRUDTest.java
* @package com.hoo.test
* @project MongoDB
* @blog http://blog.iyunv.com/IBM_hoojo
* @email hoojo_@126.com
* @version 1.0
*/
public class MongoDB4CRUDTest {
   
    private Mongo mg = null;
    private DB db;
    private DBCollection users;
   
    @Before
    public void init() {
        try {
            mg = new Mongo();
            //mg = new Mongo(&quot;localhost&quot;, 27017);
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (MongoException e) {
            e.printStackTrace();
        }
        //获取temp DB;如果默认没有创建,mongodb会自动创建
        db = mg.getDB(&quot;temp&quot;);
        //获取users DBCollection;如果默认没有创建,mongodb会自动创建
        users = db.getCollection(&quot;users&quot;);
    }
   
    @After
    public void destory() {
        if (mg != null)
            mg.close();
        mg = null;
        db = null;
        users = null;
        System.gc();
    }
   
    public void print(Object o) {
        System.out.println(o);
    }
}
  
  
  
  3、 添加操作
  在添加操作之前,我们需要写个查询方法,来查询所有的数据。代码如下:

/**
* <b>function:</b> 查询所有数据
* @author hoojo
* @createDate 2011-6-2 下午03:22:40
*/
private void queryAll() {
    print(&quot;查询users的所有数据:&quot;);
    //db游标
    DBCursor cur = users.find();
    while (cur.hasNext()) {
        print(cur.next());
    }
}

@Test
public void add() {
    //先查询所有数据
    queryAll();
    print(&quot;count: &quot; &#43; users.count());
   
    DBObject user = new BasicDBObject();
    user.put(&quot;name&quot;, &quot;hoojo&quot;);
    user.put(&quot;age&quot;, 24);
    //users.save(user)保存,getN()获取影响行数
    //print(users.save(user).getN());
   
    //扩展字段,随意添加字段,不影响现有数据
    user.put(&quot;sex&quot;, &quot;男&quot;);
    print(users.save(user).getN());
   
    //添加多条数据,传递Array对象
    print(users.insert(user, new BasicDBObject(&quot;name&quot;, &quot;tom&quot;)).getN());
   
    //添加List集合
    List<DBObject> list = new ArrayList<DBObject>();
    list.add(user);
    DBObject user2 = new BasicDBObject(&quot;name&quot;, &quot;lucy&quot;);
    user.put(&quot;age&quot;, 22);
    list.add(user2);
    //添加List集合
    print(users.insert(list).getN());
   
    //查询下数据,看看是否添加成功
    print(&quot;count: &quot; &#43; users.count());
    queryAll();
}
  
  
  
  4、 删除数据

@Test
public void remove() {
    queryAll();
    print(&quot;删除id = 4de73f7acd812d61b4626a77:&quot; &#43; users.remove(new BasicDBObject(&quot;_id&quot;, new ObjectId(&quot;4de73f7acd812d61b4626a77&quot;))).getN());
    print(&quot;remove age >= 24: &quot; &#43; users.remove(new BasicDBObject(&quot;age&quot;, new BasicDBObject(&quot;$gte&quot;, 24))).getN());
}
  
  
  
  5、 修改数据

@Test
public void modify() {
    print(&quot;修改:&quot; &#43; users.update(new BasicDBObject(&quot;_id&quot;, new ObjectId(&quot;4dde25d06be7c53ffbd70906&quot;)), new BasicDBObject(&quot;age&quot;, 99)).getN());
    print(&quot;修改:&quot; &#43; users.update(
            new BasicDBObject(&quot;_id&quot;, new ObjectId(&quot;4dde2b06feb038463ff09042&quot;)),
            new BasicDBObject(&quot;age&quot;, 121),
            true,//如果数据库不存在,是否添加
            false//多条修改
            ).getN());
    print(&quot;修改:&quot; &#43; users.update(
            new BasicDBObject(&quot;name&quot;, &quot;haha&quot;),
            new BasicDBObject(&quot;name&quot;, &quot;dingding&quot;),
            true,//如果数据库不存在,是否添加
            true//false只修改第一天,true如果有多条就不修改
            ).getN());
   
    //当数据库不存在就不修改、不添加数据,当多条数据就不修改
    //print(&quot;修改多条:&quot; &#43; coll.updateMulti(new BasicDBObject(&quot;_id&quot;, new ObjectId(&quot;4dde23616be7c19df07db42c&quot;)), new BasicDBObject(&quot;name&quot;, &quot;199&quot;)));
}
  
  
  
  6、 查询数据

@Test
public void query() {
    //查询所有
    //queryAll();
   
    //查询id = 4de73f7acd812d61b4626a77
    print(&quot;find id = 4de73f7acd812d61b4626a77: &quot; &#43; users.find(new BasicDBObject(&quot;_id&quot;, new ObjectId(&quot;4de73f7acd812d61b4626a77&quot;))).toArray());
   
    //查询age = 24
    print(&quot;find age = 24: &quot; &#43; users.find(new BasicDBObject(&quot;age&quot;, 24)).toArray());
   
    //查询age >= 24
    print(&quot;find age >= 24: &quot; &#43; users.find(new BasicDBObject(&quot;age&quot;, new BasicDBObject(&quot;$gte&quot;, 24))).toArray());
    print(&quot;find age <= 24: &quot; &#43; users.find(new BasicDBObject(&quot;age&quot;, new BasicDBObject(&quot;$lte&quot;, 24))).toArray());
   
    print(&quot;查询age!=25:&quot; &#43; users.find(new BasicDBObject(&quot;age&quot;, new BasicDBObject(&quot;$ne&quot;, 25))).toArray());
    print(&quot;查询age in 25/26/27:&quot; &#43; users.find(new BasicDBObject(&quot;age&quot;, new BasicDBObject(QueryOperators.IN, new int[] { 25, 26, 27 }))).toArray());
    print(&quot;查询age not in 25/26/27:&quot; &#43; users.find(new BasicDBObject(&quot;age&quot;, new BasicDBObject(QueryOperators.NIN, new int[] { 25, 26, 27 }))).toArray());
    print(&quot;查询age exists 排序:&quot; &#43; users.find(new BasicDBObject(&quot;age&quot;, new BasicDBObject(QueryOperators.EXISTS, true))).toArray());
   
    print(&quot;只查询age属性:&quot; &#43; users.find(null, new BasicDBObject(&quot;age&quot;, true)).toArray());
    print(&quot;只查属性:&quot; &#43; users.find(null, new BasicDBObject(&quot;age&quot;, true), 0, 2).toArray());
    print(&quot;只查属性:&quot; &#43; users.find(null, new BasicDBObject(&quot;age&quot;, true), 0, 2, Bytes.QUERYOPTION_NOTIMEOUT).toArray());
   
    //只查询一条数据,多条去第一条
    print(&quot;findOne: &quot; &#43; users.findOne());
    print(&quot;findOne: &quot; &#43; users.findOne(new BasicDBObject(&quot;age&quot;, 26)));
    print(&quot;findOne: &quot; &#43; users.findOne(new BasicDBObject(&quot;age&quot;, 26), new BasicDBObject(&quot;name&quot;, true)));
   
    //查询修改、删除
    print(&quot;findAndRemove 查询age=25的数据,并且删除: &quot; &#43; users.findAndRemove(new BasicDBObject(&quot;age&quot;, 25)));
   
    //查询age=26的数据,并且修改name的&#20540;为Abc
    print(&quot;findAndModify: &quot; &#43; users.findAndModify(new BasicDBObject(&quot;age&quot;, 26), new BasicDBObject(&quot;name&quot;, &quot;Abc&quot;)));
    print(&quot;findAndModify: &quot; &#43; users.findAndModify(
        new BasicDBObject(&quot;age&quot;, 28), //查询age=28的数据
        new BasicDBObject(&quot;name&quot;, true), //查询name属性
        new BasicDBObject(&quot;age&quot;, true), //按照age排序
        false, //是否删除,true表示删除
        new BasicDBObject(&quot;name&quot;, &quot;Abc&quot;), //修改的&#20540;,将name修改成Abc
        true,
        true));
   
    queryAll();
}
  
  
  mongoDB不支持联合查询、子查询,这需要我们自己在程序中完成。将查询的结果集在Java查询中进行需要的过滤即可。
  
  7、 其他操作

public void testOthers() {
    DBObject user = new BasicDBObject();
    user.put(&quot;name&quot;, &quot;hoojo&quot;);
    user.put(&quot;age&quot;, 24);
   
    //JSON 对象转换        
    print(&quot;serialize: &quot; &#43; JSON.serialize(user));
    //反序列化
    print(&quot;parse: &quot; &#43; JSON.parse(&quot;{ \&quot;name\&quot; : \&quot;hoojo\&quot; , \&quot;age\&quot; : 24}&quot;));
   
    print(&quot;判断temp Collection是否存在: &quot; &#43; db.collectionExists(&quot;temp&quot;));
   
    //如果不存在就创建
    if (!db.collectionExists(&quot;temp&quot;)) {
        DBObject options = new BasicDBObject();
        options.put(&quot;size&quot;, 20);
        options.put(&quot;capped&quot;, 20);
        options.put(&quot;max&quot;, 20);
        print(db.createCollection(&quot;account&quot;, options));
    }
   
    //设置db为只读
    db.setReadOnly(true);
   
    //只读不能写入数据
    db.getCollection(&quot;test&quot;).save(user);
}
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-137652-1-1.html 上篇帖子: MongoDB Helper的简单封装 下篇帖子: Linux下Mongodb数据库主从同步配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表