【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文档地址为:

MongoDB for Java相关的操作实例代码:

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

<span style="font-size:18px;"><project xmlns="" xmlns:xsi=""xsi:schemaLocation=" 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></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;@Beforepublic 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");}@Afterpublic 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查询所有数据).*/@Testpublic void queryAll() {print("查询webInfos的所有数据:");// db游标DBCursor cur = webInfos.find();while (cur.hasNext()) {print(cur.next());}}/*** add(插入一个对象).*/@Testpublic void addObject() {// 先查询所有数据queryAll();print("count: " + webInfos.count());DBObject webInfo = new BasicDBObject();webInfo.put("name", "追梦客");webInfo.put("address", "");// webInfos.save(webInfo)保存,getN()获取影响行数print(webInfos.save(webInfo).getN());// 查询下数据,看看是否添加成功print("count: " + webInfos.count());queryAll();}/*** add(插入一个List).*/@Testpublic void addList() {queryAll();print("count: " + webInfos.count());DBObject webInfo = new BasicDBObject();List<DBObject> list = new ArrayList<DBObject>();webInfo.put("name", "追梦客");webInfo.put("address", "");webInfo.put("age", 2);list.add(webInfo);DBObject webInfo2 = new BasicDBObject("name", "追梦客2");webInfo2.put("address", "");webInfo2.put("age", 1);list.add(webInfo2);webInfos.insert(list);// 查询下数据,看看是否添加成功print("count: " + webInfos.count());queryAll();}/*** add(插入一个数组).*/@Testpublic void addArray() {queryAll();print("count: " + webInfos.count());DBObject webInfo = new BasicDBObject();webInfo.put("name", "追梦客");webInfo.put("address", "");// 添加多条数据,传递Array对象webInfos.insert(webInfo, new BasicDBObject("name", "雨打排行"));print("count: " + webInfos.count());queryAll();}/**** remove( 删除数据).*/@Testpublic 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(修改数据).*/@Testpublic 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( 查询数据).*/@Testpublic void query() {// 查询id = 54dc130fc50a1c2e75e2b05cprint("find id = 54dc130fc50a1c2e75e2b05c: "+ webInfos.find(new BasicDBObject("_id", new ObjectId("54dc130fc50a1c2e75e2b05c"))).toArray());// 查询age = 122print("find age = 122: "+ webInfos.find(new BasicDBObject("age", 122)).toArray());// 查询age >= 1print("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的方法都是一些常用的方法,,比较简单。如果有什么问题,可以给我留言,谢谢!

往往为了自己的不能失败,而处心积虑前怕狼后怕虎,

【MongoDB for Java】Java操作MongoDB

相关文章:

你感兴趣的文章:

标签云: