`

Java操作MongoDB

阅读更多

转自::[http://www.cnblogs.com/dennisit/archive/2013/01/29/2881006.html]

步骤1:导入jar包到项目中

步骤2:操作mongodb

   

Java对mongodb的$slice操作

Java对mongodb的$eleMatch操作

Java对mongodb的$where操作

 

 

对索引的操作

创建索引

SQL:

MongoDB:         db.集合.ensureIndex({'列1':1,'列2':-1})    //1-升序  -1-降序

Java: 

Java可以通过DBCollection类的createIndex(DBObject keys)方法创建索引,它接收一个DBObject类型的参数“keys”用于表明在哪些列上创建索引.

对1列创建索引

DBCollection collection = db.getCollection("集合");
//在user集合的name列上创建索引
collection.createIndex(new BasicDBObject(“name”,1));
可以通过db.集合.getIndexes();查看索引信息
对多列创建索引
DBCollection collection = db.getCollection("集合");
BasicDBObject index = new BasicDBObject();
index.put("name", 1);
index.put("password", -1);
collection.createIndex(index);

获取索引

MongoDB:   db.集合.getIndexes();

Java:

DBCollection类的getIndexInfo();

DBCollection collection = db.getCollection(“user”);
//获取集合中的所有索引信息
List<DBObject> list = collection.getIndexInfo();
for(DBObject var : list){
      System.out.println(var);
}

 

删除索引

MongoDB:  db.集合.dropIndex({'列1':1,'列2':})

Java:

DBCollection collection = db.getCollection(“user”);
//删除集合中的指定索引信息,删除name索引,1表示删除为真
collection.dropIndex(new BasicDBObject(“name”,1));

 

//删除该集合中所有索引[_id索引不支持删除]
collection.dropIndexes();
可以通过db.user.getIndexKeys();查看user集合中的索引

 

Java对MongoDB的高级查询

 

使用QueryBuilder查询构造器对MongoDB进行高级查询

SQL语句:
select
* from user where name = ‘user3’;
MongoDB:
db.user.find( { name:
“user3″} );
Java代码:
DBCollection collection
= db.getCollection(“user”);
//查询用户名为user3的用户
DBObject query = new QueryBuilder().put(“name”).is(“user3″).get();
DBCursor cur
= collection.find(query);
while(cur.hasNext()){
       System.out.println(cur.next());
}
输出结果:
{
“_id” : { “$oid” : “50f6d250778eafb6ef5bcee7″} , “name” : “user3″ , “age” : 23.0}

 

notEquals不等于

查询user集合中用户名name值不等于user3的用户

SQL语句:
select
* from user where username != ‘user3’;
MongoDB:
db.user.find( { name:{$ne:
“user3″} } );
Java代码:
DBCollection collection
= db.getCollection(“user”);
//查询用户名不为user3的用户
DBObject query = new QueryBuilder().put(“name”).notEquals(“user3″).get();
DBCursor cur
= collection.find(query);
while(cur.hasNext()){
System.out.println(cur.next());
}
输出结果:
{
“_id” : { “$oid” : “50f6d250778eafb6ef5bcee5″} , “name” : “user1″ , “age” : 21.0}
{
“_id” : { “$oid” : “50f6d250778eafb6ef5bcee6″} , “name” : “user2″ , “age” : 22.0}
{
“_id” : { “$oid” : “50f6d250778eafb6ef5bcee8″} , “name” : “user4″ , “age” : 24.0}
{
“_id” : { “$oid” : “50f6d250778eafb6ef5bcee9″} , “name” : “user5″ , “age” : 25.0}

 

greaterThan大于

查询user集合中age大于22的用户

SQL语句:
select
* from user where age > 22;
MongoDB:
db.user.find( { age:{$gt:
22} } );
QueryBuilder构造:
DBObject query
= new QueryBuilder().put(“age”).greaterThan(22).get();

 

 

greaterThanEquals大于等于

查询user集合中age大于等于22的用户

SQL语句:
select
* from user where age >= 22;
MongoDB:
db.user.find( { age:{$gte:
22} } );
QueryBuilder构造:
DBObject query
= new QueryBuilder().put(“age”).greaterThanEquals(22).get();

 

lessThan小于

查询user集合中age小于22的用户

SQL语句:
select
* from user where age < 22;
MongoDB:
db.user.find( { age:{$lt:
22} } );
QueryBuilder构造:
DBObject query
= new QueryBuilder().put(“age”).lessThan(22).get();

 

lessThanEquals小于等于

查询user集合中age小于等于22的用户

SQL语句:
select
* from user where age <= 22;
MongoDB:
db.user.find( { age:{$lte:
22} } );
QueryBuilder构造:
DBObject query
= new QueryBuilder().put(“age”).lessThanEquals(22).get();

 

 

In范围内

查询user集合中age在23或24的记录

SQL语句:
select
* from user where age in (23,24);
MongoDB:
db.user.find( { age:{$in:[
23,24]} } );
Java代码:
DBCollection collection
= db.getCollection(“user”);
//查询user集合中age为23或者24的用户
int[] inList = {23,24};
DBObject query
= new QueryBuilder().put(“age”).in(inList).get();
DBCursor cur
= collection.find(query);
while(cur.hasNext()){
System.out.println(cur.next());
}

 

 

notIn范围外

查询user集合中age不是23或24的记录

SQL语句:
select
* from user where age not in (23,24);
MongoDB:
db.user.find( { age:{$nin:[
23,24]} } );
Java代码:
DBCollection collection
= db.getCollection(“user”);
//查询user集合中age为23或者24的用户
int[] inList = {23,24};
DBObject query
= new QueryBuilder().put(“age”).notIn(inList).get();
DBCursor cur
= collection.find(query);

 

and逻辑与

查询user集合中age大于22并且性别为”man“的用户

SQL语句:
select
* from user where sex = ‘man’ and age > 20;
MongoDB:
db.user.find({sex:
“man”,age:{$gt:20}});
Java代码:
//查询user集合中age大于22并且性别为”man“的用户
DBObject query = new QueryBuilder().put(“sex”).is(“man”).and(“age”).greaterThan(20).get();

 

正则表达式

查询name以user开头的记录

SQL语句:
select
* from user where name like ‘user%’;
MongoDB:
db.user.find({name:
/^user.*/});
Java代码:
DBCollection collection
= db.getCollection(“user”);
Pattern pattern
= Pattern.compile(“^user”);
BasicDBObject query
= new BasicDBObject(“name”,pattern);

 

分页查询

mongoDB中通过skip()和limit()结合实现分页

public static void main(String[] args) {

Mongo mongo = null;
try {
//通过连接字符串得到一个数据库实例的连接
mongo = new Mongo(“127.0.0.1″,27017);
}
catch (Exception e) {
e.printStackTrace();
}
//连接超级用户
DB db = mongo.getDB(“mydb”);
//指定安全授权信息[超级用户的用户名为root,密码为root123]
db.authenticate(“mydbusr”, “123”.toCharArray());

 

int perNum = 10; //每页显示的数目
int count = 0; //数据库中总共记录数目
int pageNum = 0; //分页后的页数

DBCollection collection
= db.getCollection(“user”);

count

= (int)collection.getCount(); //总共记录数
pageNum = (count-1)/perNum + 1; //计算总共页数

System.out.println(
“数据库”+collection+”中共有”+count+”条记录,每页显示”+perNum+”条记录,可显示”+pageNum+”页”);

 

//循环分页打印
for(int i=0; i<pageNum; i++){
System.out.println(
“————第” + (i+1) + “页数据————“);
DBCursor cur
= collection.find().skip(i*perNum).limit(perNum);
while(cur.hasNext()){
System.out.println(cur.next());
}
}
}

 

 

Java操作GridFS

 

插入数据

使用GridFS类的createFile(File file)方法可以将大文件保存到MongoDB中,该方法接收一个参数,表示本地文件路径

public static void main(String[] args) {
Mongo mongo
= null;
try {
mongo
= new Mongo(“127.0.0.1″,27017);
}
catch (Exception e) {
// TODO: handle exception
}
DB db
= mongo.getDB(“mydb”);
db.authenticate(
“mydbusr”, “123”.toCharArray());

 

File zipFile

= new File(“D:/freemarker源码.rar”); //创建文件对象
//将文件存放到file数据库中
GridFS gfs = new GridFS(db,”file”);

 

//创建大文件对象输入流
GridFSInputFile gfsFile = null;
try {
//将本地文件存储到mongo中
gfsFile = gfs.createFile(zipFile);
}
catch (Exception e) {
e.printStackTrace();
}
//设置存储的文件名
gfsFile.setFilename(“demozip”);
gfsFile.save();
}
在mydb数据库下查看存储的文件信息
> db
mydb
> show collections;
file.chunks
file.files
system.indexes
system.users
user
> db.file.files.findOne();
{
“_id” : ObjectId(“50f780a7de886482c92a56c9″),
“chunkSize” : NumberLong(262144),
“length” : NumberLong(83711),
“md5″ : “51f235ccf838511eb0f53633dbca22b3″,
“filename” : “demozip”,
“contentType” : null,
“uploadDate” : ISODate(“2013-01-17T04:40:07.240Z”),
“aliases” : null
}

 

查询数据

因为上传了一个zip文档,为了方便观察,使用GridFS类的findOne(DBObject query)方法,按文件名查找数据库中的GridFS对象信息,该方法结束1个参数,代表查询条件.

DB db = mongo.getDB(“mydb”);
db.authenticate(
“mydbusr”, “123”.toCharArray());

 

//将文件存放到file数据库中
GridFS gfs = new GridFS(db,”file”);

 

//查询GridFS数据,按照文件名查询 db.file.files.findOne({filename:”demozip”});
GridFSDBFile zipfile = gfs.findOne(“demozip”);
System.out.println(zipfile);

 

读取并保存数据

首先用find或者findOne方法找到GridFS对象,再用writeTo方法将数据写到本地.

DB db = mongo.getDB(“mydb”);
db.authenticate(
“mydbusr”, “123”.toCharArray());

 

GridFS gfs

= new GridFS(db,”file”);

 

//查询GridFS数据,按照文件名查询 db.file.files.find({filename:”demozip”});
GridFSDBFile zipfile = gfs.findOne(“demozip”);
System.out.println(
“服务器端文件MD5值为:” + zipfile.getMD5());
try {
//将读取到的文件写到本地
zipfile.writeTo(“E:/downgidfs.zip”);
}
catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
控制台输出:服务器端文件MD5值为:51f235ccf838511eb0f53633dbca22b3
验证下载到的文件的MD5
E:
>md5sum downgidfs.zip
51f235ccf838511eb0f53633dbca22b3
*downgidfs.zip

 

删除数据

Java中使用remove(DBObject query)来实现移除数据

GridFS gfs = new GridFS(db,”file”);
//查询GridFS数据,按照文件名查询 db.file.files.find({filename:”demozip”});
GridFSDBFile zipfile = gfs.findOne(“demozip”);
//删除查询到的GridFS数据
gfs.remove(zipfile);
分享到:
评论

相关推荐

    java 操作mongodb

    【Java 操作 MongoDB 知识点详解】 MongoDB 是一个流行的开源、分布式文档数据库系统,以其灵活性、高性能和高可用性而受到欢迎。在 Java 开发环境中,可以通过 MongoDB 的 Java 驱动程序来实现对 MongoDB 数据库的...

    java 操作mongodb 增删改查

    以上就是Java操作MongoDB的基本步骤。这个“mongodb_helloworld”项目应该包含示例代码,帮助初学者快速上手。记得在实际应用中,你需要处理异常并适当地关闭MongoClient,以避免资源泄漏: ```java mongoClient....

    java操作mongodb存储文件实例

    将一系列图片文件存储到MongoDB中 java操作mongodb存储文件

    java操作mongoDB(CRUD)

    Java操作MongoDB主要涉及到的是Java驱动程序与MongoDB数据库之间的交互,这涵盖了创建连接、执行CRUD(创建、读取、更新、删除)操作等一系列基本的数据库管理任务。MongoDB是一个流行的NoSQL数据库,以其灵活性、高...

    java操作mongodb示例分享

    Java操作MongoDB是一种常见的数据交互方式,特别是在Java后端开发中。MongoDB是一个NoSQL数据库,以其灵活性、高性能和易扩展性而受到欢迎。在Java中,我们可以使用MongoDB的Java驱动程序来与MongoDB进行通信。以下...

    Mongodb + GridFS +Java 操作Mongodb中存储的文件

    在这个Java操作MongoDB中存储的文件实例中,我们将探讨如何利用GridFS API进行文件的存取。 首先,我们需要在Java项目中引入MongoDB的驱动库。目前,Java驱动通常使用的是MongoDB Java Driver,可以在Maven仓库中...

    JAVA操作MongoDB简单增删改查

    以上就是使用Java操作MongoDB的基本步骤。在实际项目中,你可能需要处理更复杂的查询和事务,以及错误处理和连接池管理等高级话题。学习更多关于MongoDB的官方文档和社区资源,如CSDN博客...

    Java操作MongoDB实例

    Java操作MongoDB实例,压缩包内为完整项目源码,使用MyEclipse软件 见文:https://blog.csdn.net/qq_33427869/article/details/87270444

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

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

    Java操作MongoDB之CRUD(增删改查)

    这篇博文“Java操作MongoDB之CRUD(增删改查)”主要探讨了如何使用Java驱动程序来执行基本的数据库操作,包括创建(Create)、读取(Read)、更新(Update)和删除(Delete)。 首先,我们来了解MongoDB的Java驱动...

    java操作mongodb的工具类

    java操作mongodb的工具类,增删查改方法

    JAVA操作MongoDB之spring整合

    在本文中,我们将深入探讨如何使用Java操作MongoDB并结合Spring框架进行整合。MongoDB是一个流行的NoSQL数据库,它以JSON格式存储数据,适合处理大量非结构化或半结构化数据。Spring框架则是一个强大的Java企业级...

    Java操作mongoDB使用文档.docx(16页.docx

    以上就是使用Java操作MongoDB的基本步骤。在实际应用中,你可能需要处理更复杂的查询和更新,以及错误处理、连接管理等。MongoDB提供了丰富的查询表达式,如`$gt`, `$lt`, `$in`, `$exists`等,以及聚合框架和地理...

    java操作mongodb的demo(带驱动jar)

    Java操作MongoDB是一种常见的数据交互方式,特别是在大数据和分布式系统中。MongoDB是一个高性能、开源、无模式的文档型数据库,而Java作为广泛使用的编程语言,提供了丰富的库和API来与MongoDB进行交互。本Demo提供...

    Java操作MongoDB数据库示例分享

    为了更深入地了解如何使用Java操作MongoDB,你需要学习以下知识点: 1. **MongoDB Java驱动程序**:了解如何添加驱动程序依赖,以及如何创建`MongoClient`实例来连接到MongoDB服务器。 2. **数据模型**:理解...

    JAVA操作MongoDB

    ### JAVA操作MongoDB知识点详解 #### 1. Java操作MongoDB简介 MongoDB是一种面向文档的NoSQL数据库,它提供了灵活的文档模型和高性能的读写操作,非常适合处理大量的数据和快速迭代的开发环境。而Java是一种广泛...

    java操作mongodb

    Java 操作 MongoDB 是一个常见的需求,特别是在开发基于 Java 的应用程序时需要存储和检索非结构化数据。本篇文章将深入探讨如何使用 Java SDK 来与 MongoDB 进行交互,包括基本的增、删、改、查操作。 首先,要...

Global site tag (gtag.js) - Google Analytics