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

【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>

如果你的开发环境没有安装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,基本测试代码如下:

<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的方法都是一些常用的方法,比较简单。如果有什么问题,可以给我留言,谢谢!

时间: 2024-10-09 17:26:29

MongDB基础学习(七)—— 【MongoDB for Java】Java操作MongoDB的相关文章

MongDB基础学习(五)——投影,分页,排序,聚合

MongDB基础学习(五)--投影,分页,排序,聚合 基础语法的学习 马上就要过年啦,明天也是情人,后天就要放假啦,希望自己能够在放假前把五和六的章节写完.很高兴的一点,昨天看到我写的"[MongoDB for Java]Java操作MongoDB"能够被放到CSDN博客的首页的头条,本章节的学习内容如下: (1)    MongoDB的投影的语法和示例学习 (2)    MongoDB的Limit()和Skip()方法学习,从而达到分页的效果 (3)    MongoDB的sort(

Java开发--操作MongoDB

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.j

java中操作Mongodb

Mongodb是一个nosql型的数据库,存储的是类似于json对象,能够支持类似于关系型数据库的一些操作.以下是java操作mongodb. 一.建立连接(没有使用任何框架,连接是自己写的,同时在这个类写了关闭连接的方法),传入ip地址.端口和数据库名称(mongodb称集合) public class MongoDbConn { private static MongoClient mongoClient = null; private static MongoDatabase mongoD

Java基础学习笔记 -- 2(MyEclipe创建Java工程)

1. IDE开发工具介绍 IDE(集成开发环境:Integrated Development Environment)是专为程序员提供的应用软件,这些软件具备功能强大的图形界面.在IDE的辅助下,程序员可以更加高效的完成编译.调试.提交.重构等工作. Eclipse.MyEclipse是目前主流的IDE开发工具. Eclipse是IBM斥资数千万美元打造的开源项目,除了开源之外,Eclipse成功的最大原因在于它是基于'插件'的特性.Eclipse本身是一个平台框架,提供标准的服务,它本身是使用

java基础学习02(简单的java程序)

简单的java程序 一.完成的目标 1. 理解java程序的基本组成 2. 如何对程序代码进行注释 3. java标识符的命名规则 4. 了解java中的关键字 5. 使用java定义变量或声明变量 二.一个简单的java程序 public class TestJava{ public static void main(String [] args){ //操作一个简单的范例,输出和乘方 int num = 10; //定义一个整型变量 num = 30; //修改变量 System.out.p

JAVA基础学习--Eclipse中导入一个java文件

在编写java工程时,可能会用到别的已经成熟的java类文件,那么如何才能将目标类文件导入到工程中呢, 以下Operation.java为例. 现一个java文件源码. 1.打开eclipse,“File”->"New"->"Java Project",在Project Name中输入工程名,如:com.linwu.其他参数使用默认数据.点击Finish 2.在工程com.linwu下的Src,点击右键,选择New->Package,在name这一

Java连接,操作MongoDB

java连接MongoDB非常的简单,具体来说就2步: 1:向新建的工程中导入java-mongo的驱动包 如图: 2:建立一个链接帮助类,完成链接操作 package com.yc.mongodb; import java.util.Iterator; import java.util.Set; import com.mongodb.BasicDBObject; import com.mongodb.DB; import com.mongodb.DBCollection; import com

salesforce lightning零基础学习(七) 列表展示数据时两种自定义编辑页面

上一篇Lightning内容描述的是LDS,通过LDS可以很方便的实例化一个对象的数据信息.当我们通过列表展示数据需要编辑时,我们常使用两种方式去处理编辑页面:Pop Up Window弹出修改详情以及在本页面隐藏详情页面显示编辑页面. 实现这个功能以前主要需要先了解几个标签: lightning:recordForm: 此标签允许用户快速的创建一个form去查看,添加以及修改一条记录.集合了 lightning:recordEditForm 以及 lightning:recordViewFor

CSS基础学习七:属性选择器

CSS语法中,对带有指定属性的 HTML 元素设置样式.可以为拥有指定属性的 HTML 元素设置样式,而不仅限 于 class 和 id 属性.(注释:Internet Explorer 7 (以及更高版本)在规定了 !DOCTYPE 的情况下支持属性选择器. IE6 及更低的版本不支持属性选择器.) CSS2引入了属性选择器.属性选择器可以根据元素的属性及属性值来选择元素. 一简单属性选择器 如果希望选择有某个属性的元素,而不论属性值是什么,可以使用简单属性选择器. (1)先来一个简单的例子: