`
sdu_wizard
  • 浏览: 99921 次
  • 性别: Icon_minigender_1
  • 来自: 亚特兰蒂斯
社区版块
存档分类
最新评论

java操作mongo的一点记录

阅读更多

一、驱动

mongo对应的java驱动的下载地址

https://github.com/mongodb/mongo-java-driver/downloads

 

二、文档

API文档的地址

http://api.mongodb.org/java/

官方入门地址

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

在java里像在shell里一样操作mongo的一个东东

http://www.jongo.org

 

三、官方的几点说明(未完全翻译官方网站提供的所有内容)

1.java驱动的并发情况

    mongo db的java驱动是线程安全的,在一个web项目中,可以创建一个Mongo的单例,然后在每次请求时都使用这个单例。该单例会维护一个内部的连接池(默认大小为10),对于每次对DB的请求(find、insert等),java线程都会从连接池中获取一个连接,进行操作,然后释放连接,所以,每次使用的连接可能不总是同一个连接。如果你想一直使用同一个连接,可以用下边这种方式:


DB db...;
db.requestStart();
code....
db.requestDone();


    但是如果最后db.requestDone()没有被调用,该连接不会被交还给线程池,所以,一定要在finally块中调用db.requestDone()。

    DB和DBCollection都是线程安全的。

    在默认配置的情况下,每次对DB请求(find、insert等)后,连接会被交还给连接池,你并不知道是否操作成功,这会造成“数据无故丢失”的情况。所以,对于数据安全性比较重要的操作,我们要使用WriteConcern.SAFE模式,这样,驱动会在将连接交还前调用getLastError()方法来校验是否操作成功。示例如下:

DBCollection coll...;
coll.insert(..., WriteConcern.SAFE);

2.数据类型

 

 

(1)正则表达式

    java驱动使用java.util.regex.Pattern做正则表达式:

 

Pattern john = Pattern.compile("joh?n", CASE_INSENSITIVE);
BasicDBObject query = new BasicDBObject("name", john);
// finds all people with "name" matching /joh?n/i
DBCursor cursor = collection.find(query);

 

(2)日期、时间

    java驱动使用java.util.Date做日期:

 

Date now = new Date();
BasicDBObject time = new BasicDBObject("ts", now);
collection.save(time);

 

(3)内嵌文档

 

{
    "x" : {
        "y" : 3
    }
}

 

上边这种文档结构可以用下边这种方式存储

 

BasicDBObject y = new BasicDBObject("y", 3);
BasicDBObject x = new BasicDBObject("x", y);

 

(4)数组

    扩展自List的结构都可以用数组形式存储

 

{
    "x" : [
        1,
        2,
        {"foo" : "bar"},
        4
    ]
}

 

上边这种结构形式可以用下边这种方式存储

 

ArrayList x = new ArrayList();
x.add(1);
x.add(2);
x.add(new BasicDBObject("foo", "bar"));
x.add(4);
BasicDBObject doc = new BasicDBObject("x", x);

四、MongoOptions

 

java驱动中,可以在获取mongo实例时,指定一些参数,如下:

ServerAddress serverAddress=new ServerAddress("127.0.0.1",27017);

 

MongoOptions mongoOptions=new MongoOptions();

Mongo mongo=new Mongo(serverAddress,mongoOptions);

参数列表如下:

 

#控制系统在发生连接错误时是否重试 ,默认为false --boolean

mongo.options.autoConnectRetry=false

#每个主机允许的连接数(每个主机的连接池大小),当连接池被用光时,会被阻塞住 ,默认为10 --int

mongo.options.connectionsPerHost=10

#设置等待获取连接池连接的最大数,比如,connectionsPerHost 是10,threadsAllowedToBlockForConnectionMultiplier 是5,则最多有50个线程可以等待获取连接 --int

 

mongo.options.threadsAllowedToBlockForConnectionMultiplier=5

#被阻塞线程从连接池获取连接的最长等待时间(ms) --int

mongo.options.maxWaitTime 

#在建立(打开)套接字连接时的超时时间(ms),默认为0(无限) --int

mongo.options.connectTimeout=0

#套接字超时时间;该值会被传递给Socket.setSoTimeout(int)。默认为0(无限) --int

mongo.options.socketTimeout=0

#This controls whether or not to have socket keep alive turned on (SO_KEEPALIVE). defaults to false --boolean

mongo.options.socketKeepAlive=false

#Override the DBCallback factory. Default is for the standard Mongo Java driver configuration --DBCallbackFactory

mongo.options.dbCallbackFactory 

#//指明是否允许驱动从次要节点或者奴隶节点读取数据,默认为false --boolean

mongo.options.slaveOk=false

#如果为true,驱动每次update后会发出一个getLastError命令来保证成功,默认为false --boolean

mongo.options.safe=false 

#If set, the w value of WriteConcern for the connection is set to this. Defaults to 0; implies safe = true --int

mongo.options.w=0

#If set, the wtimeout value of WriteConcern for the connection is set to this. Defaults to 0; implies safe = true --int

mongo.options.wtimeout=0

#Sets the fsync value of WriteConcern for the connection. Defaults to false; implies safe = true --boolean

mongo.options.fsync=false

 

五、杂

ObjectId由4部分编码而成:当前时间、机器标识、进程号和自增的整数。

排序加翻页

collection.find(queryObject).sort(new BasicDBObject().append("pt", "-1").append("ct", "1")).skip(10).limit(10);

 

 

 

 

 

小记录:

从名为tag的数组中删除值为123的元素

BasicDBObject updateObject = new BasicDBObject().append("$pull", new BasicDBObject().append("tag","123"));

//queryObject是查询条件

dbCollection.updateMulti(queryObject, updateObject);

 

 

六、操作

 

查询数量,以下三种方式未发现明显性能差别,相对于在mongoVUE里查询,都表现较慢

 

//  方式一
 long count=collection.find(queryObject).count();
 //方式二,可以查询某个字段的数量 
 long count=collection.getCount(queryObject,new BasicDBObject().append("_id", 1));
//方式三
 long count=collection.count(queryObject);

 

批量从数组中删除元素

 

//从name等于xiaoming的文档中批量删除tag数组中的r521元素
collection.updateMulti(new BasicDBObject().append("name", "xiaoming"),
       new BasicDBObject().append("$pull", new BasicDBObject().append("tag","r521")));
 

存图片文件

String newFileName = "mkyong-java-image";
File imageFile = new File("c:\\JavaWebHosting.png");
GridFS gfsPhoto = new GridFS(db, "photo");
GridFSInputFile gfsFile = gfsPhoto.createFile(imageFile);
gfsFile.setFilename(newFileName);
gfsFile.save();

取图片文件

String newFileName = "mkyong-java-image";
GridFS gfsPhoto = new GridFS(db, "photo");
GridFSDBFile imageForOutput = gfsPhoto.findOne(newFileName);
System.out.println(imageForOutput);

打印所有图片

GridFS gfsPhoto = new GridFS(db, "photo");
DBCursor cursor = gfsPhoto.getFileList();
while (cursor.hasNext()) {
	System.out.println(cursor.next());
}

存到另外一个文件中

String newFileName = "mkyong-java-image";
GridFS gfsPhoto = new GridFS(db, "photo");
GridFSDBFile imageForOutput = gfsPhoto.findOne(newFileName);
imageForOutput.writeTo("c:\\JavaWebHostingNew.png"); //output to new file

 

删除图片

String newFileName = "mkyong-java-image";
GridFS gfsPhoto = new GridFS(db, "photo");
gfsPhoto.remove(gfsPhoto.findOne(newFileName));

 

to be continued...

1
0
分享到:
评论
1 楼 cgyong 2014-10-30  
 

相关推荐

    java针对mongo操作的封装,完全面向对象,无需修改,可直接使用

    完全面向对象的mongo封装,maven工程源码,可直接install导出jar包引用,支持基本的增删改查和分页等,使用反射对javaBean实体进行映射,所有方法参数只需要传javaBean就行了,支持带密码连接,即拿即用,无需修改。

    Java操作mongo

    Java操作MongoDB是一种常见的数据交互方式,特别是在Java后端开发中。MongoDB是一个流行的文档型数据库,它提供了灵活的数据模型和高性能的存储解决方案。在Java中与MongoDB进行交互主要依赖于官方提供的Java驱动...

    java操作mongo的小例子

    本示例将探讨如何使用Java与MongoDB进行交互,实现数据的存取操作。 首先,为了在Java中使用MongoDB,我们需要引入MongoDB的Java驱动程序。这通常通过Maven或Gradle的依赖管理工具完成。对于Maven,可以在`pom.xml`...

    java操作 mongo DB 数据库例子

    这篇博客"java操作mongo DB数据库例子"提供了使用Java与MongoDB交互的示例代码,对于学习如何在Java应用中集成MongoDB非常有帮助。MongoDB的主要优势包括灵活的数据模型、高性能以及易于扩展性。 首先,我们需要...

    java mongo 驱动 driver

    java mongo 驱动 driver java mongo 驱动 driver java mongo 驱动 driver java mongo 驱动 driver

    mongo的java的API

    mongo的java的API

    java 执行cmd命令及mongodb脚本

    在Java中,我们可以使用Runtime类或ProcessBuilder类来执行操作系统级别的命令。这两种方法都能实现与操作系统的交互,但各自有其特点。 1. 使用Runtime类: ```java Runtime runtime = Runtime.getRuntime(); ...

    mongo-java-driver-3.2.2

    在"mongo-java-driver-3.2.2"这个版本中,我们探讨的是一个关键的中间件,它允许Java应用程序充分利用MongoDB的功能,包括数据存储、查询、更新以及删除操作。 MongoDB是一个流行的NoSQL数据库系统,以其灵活性、高...

    java mongo API

    它允许开发者在Java应用中执行CRUD(创建、读取、更新、删除)操作以及更复杂的数据库任务。MongoDB是一款NoSQL数据库,以其灵活性、高性能和强大的数据模型而受到广泛欢迎。 在使用Java MongoDB API之前,你需要先...

    mongo-java-driver-3.12.2.jar

    mongo-java-driver-3.12.2.jar,mongo官网上下载的,用于java-api操作mongodn数据库的驱动程序jar包

    mongo-java-driver-3.2.2.jar.zip

    MongoDB是一个流行的开源、文档型数据库系统,而`mongo-java-driver`是官方提供的Java API,允许开发者在Java应用程序中执行各种数据库操作,如读取、写入、查询等。 在本例中,我们讨论的是`mongo-java-driver`的...

    mongoTemplate工具类Dao层方法封装.zip

    MongoTemplate是Spring Data MongoDB框架中的一个核心组件,用于在Java应用中方便地操作MongoDB数据库。这个资源包“mongoTemplate工具类Dao层方法封装.zip”显然提供了两种版本的MongoTemplate操作集合的代码示例,...

    mongo-java驱动

    “mongo-java驱动”是MongoDB官方提供的一款Java API,它允许Java开发者在应用程序中直接操作MongoDB数据库。这个驱动程序版本为2.6.5,是针对Java的一个稳定版本,适合各种规模的应用。 在使用“mongo-java驱动”...

    mongo java最新驱动API

    最新mongo_java_driver_2.9.3_API.chm帮助文档,希望帮助到更多学习mongodb的童鞋。。

    mongo-java-driver-3.9.1

    本资源内含4个文件:mongo-java-driver-3.9.1.jar,MongoDB JDBC驱动包。mongo-java-driver-3.9.1-sources.jar,MongoDB JDBC驱动源代码包。mongo-java-driver-3.9.1-javadoc.jar,MongoDB JDBC驱动JAVA API文档包。...

    MongoDB Java Driver 简单操作

    ### MongoDB Java Driver 简单操作详解 #### 一、简介 MongoDB 是一款非常流行的文档型数据库系统,因其灵活性和高性能而被广泛应用于多种场景之中。为了方便开发者使用 Java 进行开发,MongoDB 提供了官方的 Java ...

    mongo-java-driver-3.11.2.jar

    mongo-java-driver-3.11.2,用于java项目连接mongoDB作为类似JDBC一样使用,同时可以作为其它java程序连接mongoDB的工具

    mongo java driver doc jar

    不解释了 需要的人拿去 mongo-2.5.3.jar java 驱动还有doc

    java操作mongoDB实现文件上传预览打包下载

    对于"java操作mongoDB实现文件上传预览打包下载"这个主题,我们将深入探讨如何利用Java与MongoDB交互,实现文件的上传、下载、预览以及打包下载等功能。 首先,我们需要在Java项目中引入MongoDB的驱动库,通常是...

    log4mongo-java.7z

    标题“log4mongo-java.7z”提示我们这是一个与Java日志记录相关的项目,它集成了MongoDB数据库来存储日志信息。MongoDB是一个流行的NoSQL数据库,以其灵活性和高性能而受到开发者的青睐。在Java应用程序中,日志记录...

Global site tag (gtag.js) - Google Analytics