当前位置:首页 > 开发 > 数据库 > 正文

Java操作MongoDB

发表于: 2015-03-03   作者:_wy_   来源:转载   浏览:
摘要: 转自::[http://www.cnblogs.com/dennisit/archive/2013/01/29/2881006.html] 步骤1:导入jar包到项目中 步骤2:操作mongodb     Java对mongodb的$slice操作 Java对mongodb的$eleMatch操作 Java对mongodb的$where操作  

转自::[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

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

推荐文章
编辑推荐
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号