package com.xxlong.crud;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.bson.BSONObject;
import org.bson.types.ObjectId;
import com.mongodb.BasicDBObject;
import com.mongodb.BasicDBObjectBuilder;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.Mongo;
import com.mongodb.MongoClient;
import com.mongodb.gridfs.GridFS;
import com.mongodb.gridfs.GridFSDBFile;
import com.mongodb.gridfs.GridFSInputFile;
import com.mongodb.util.JSON;
public class MongoTest {
public static void main(String[] args) {
try {
//创建Mongo数据库连接
MongoClient client = new MongoClient("127.0.0.1",27017);
//查询所有的数据库名
List<String> databaseNames = client.getDatabaseNames();
for(String name:databaseNames){
System.out.println(name);
}
//获得一个数据库连接
DB db = client.getDB("xxlong_db");
//查询该数据库所有的集合名
Set<String> collectionNames = db.getCollectionNames();
for(String name:collectionNames){
System.out.println(name);
}
//创建一个teacher集合
//DBObject dbo = new BasicDBObject();
//DBCollection teacher_collection = db.createCollection("teacher3", dbo);
DBCollection teacher_collection = db.getCollection("teacher3");
//向teacher集合中添加数据
/*第一种方法,是使用BasicDBObject
* { "_id" : ObjectId("55dbc9c744ae76d6d3f31483"), "name" : "xxlong", "age" : 100, "student" : [ "stu1", "stu2" ],
"course": { "book" : "java" }}
{ "_id" : ObjectId("55dbc9c744ae76d6d3f31484")}
{ "_id" : ObjectId("55dbc9c744ae76d6d3f31485") }*/
DBObject dbo1 = new BasicDBObject();
dbo1.put("name", "xxlong");
dbo1.put("age", 100);
List<String> list = new ArrayList<String>();
list.add("stu1");
list.add("stu2");
dbo1.put("student",list);
DBObject dbo2 = new BasicDBObject();
dbo2.put("book", "java");
dbo1.put("course",dbo2);
teacher_collection.insert(dbo1);
DBObject db3 = new BasicDBObject();
DBObject db4 = new BasicDBObject();
//批量插入
List<DBObject> listdbo= new ArrayList<DBObject>();
listdbo.add(db3);
listdbo.add(db4);
teacher_collection.insert(listdbo);
/*第二种方法是使用BasicDBObjectBuilder对象
{ "_id" : ObjectId("55dbee0544ae8180d0302af3"), "name" : "xxlong2", "age" : "101", "student" : [ "stu1", "stu2" ],
"course" : { "book" : "spring" } }
*/
BasicDBObjectBuilder documentBuilder = BasicDBObjectBuilder.start().add("name", "xxlong2").add("age", "101");
List<String> list2 = new ArrayList<String>();
list.add("stu1");
list.add("stu2");
documentBuilder.add("student", list2);
BasicDBObjectBuilder documentBuilder2 = BasicDBObjectBuilder.start().add("book","spring");
documentBuilder.add("course", documentBuilder2.get());
teacher_collection.insert(documentBuilder.get());
/*第三种方法是使用Map对象
{ "_id" : ObjectId("55dbeebe44aeb01826bd4c93"), "student" : [ "stu1", "stu2" ], "name" : "xxlong3", "course" :
{ "book" : "c++" }, "age" : 103 }
*/
Map<String, Object> map1 =new HashMap<String, Object>();
map1.put("name", "xxlong3");
map1.put("age", 103);
List<String> list3 = new ArrayList<String>();
list.add("stu1");
list.add("stu2");
map1.put("student", list3);
Map<String, String> map2 =new HashMap<String, String>();
map2.put("book", "c++");
map1.put("course", map2);
teacher_collection.insert(new BasicDBObject(map1));
/*第四种方法,也就是最简单的,即直接插入JSON格式数据
{ "_id" : ObjectId("55dbf03844ae34d97f3864ee"), "name" : "xxlong4", "age" : 104, "student" : [ "stu1", "stu2" ],
"course" : { "book" : "c++" }}
*/
String json = "{ 'name' : 'xxlong4', 'age' : 104,'student' : [ 'stu1', 'stu2' ], 'course' : { 'book' :'c++' } }";
DBObject dbObject =(DBObject)JSON.parse(json);
teacher_collection.insert(dbObject);
//删除第一个document
DBObject dbo_delfirst = teacher_collection.findOne();
teacher_collection.remove(dbo_delfirst);
//删除指定的document
DBObject dbo_specify = new BasicDBObject();
//指定的_id
dbo_specify.put("_id", new ObjectId("55dbf10444ae23aca6d08c57"));
//指定name和age都要符合才能删除
dbo_specify.put("name", "xxlong4");
dbo_specify.put("age",100);
teacher_collection.remove(dbo_specify);
//指定值在数组中
List<String> list4 = new ArrayList<String>();
list.add("xxlong4");
list.add("xxlong2");
DBObject dbo_array = new BasicDBObject("$in",list4);
DBObject dbo_in = new BasicDBObject();
dbo_in.put("name", dbo_array);
teacher_collection.remove(dbo_in);
//指定score值的大小范围为60-70之间{score:{$get:60,$lte:70}}
DBObject dbo_scoreRange = new BasicDBObject();
dbo_scoreRange.put("$gte", 60);
dbo_scoreRange.put("$lte", 70);
DBObject dbo_range = new BasicDBObject("score",dbo_scoreRange);
teacher_collection.remove(dbo_range);
//删除所有的值
DBCursor cur = teacher_collection.find();
while(cur.hasNext()){
teacher_collection.remove(cur.next());
}
//更新document
DBObject dbo_new = new BasicDBObject();
dbo_new.put("name", "xxlong2");
dbo_new.put("age",105 );
dbo_new.put("score", 100);
teacher_collection.update(new BasicDBObject().append("name", "xxlong"), dbo_new);
//使用$inc使score值增加10,$set也一样
DBObject dbo_newinc = new BasicDBObject();
dbo_newinc.put("$inc", new BasicDBObject().append("score", 10));
teacher_collection.update(new BasicDBObject().append("name", "xxlong2"), dbo_newinc);
//为集合增加或更新属性score
DBObject db5 = new BasicDBObject();
db5.put("$set",new BasicDBObject("score",100) );
teacher_collection.update(new BasicDBObject(), db5, true, true);
//查询teacher集合中的第一个document
DBObject dbo_first = teacher_collection.findOne();
//查询teacher集合中的全部document
DBCursor cur2 = teacher_collection.find();
while(cur2.hasNext()){
DBObject obj = cur2.next();
System.out.println(obj.get("name"));
}
//获得teacher集合中score为100的document
DBObject dbo_find = new BasicDBObject().append("score", 100);
DBCursor cur_find = teacher_collection.find(dbo_find);
while(cur_find.hasNext()){
System.out.println(cur_find.next());
}
System.out.println(cur_find.count());
//转为json字符串
System.out.println(JSON.serialize(cur_find));
//保存图片,在xxlong_db下生成了bucket.chunks和bucket.files
GridFS gfs_bucket = new GridFS(db,"bucket");
GridFSInputFile gfsFile1 = gfs_bucket.createFile( new File("/home/xxlong/p23422660.jpg"));
GridFSInputFile gfsFile2 = gfs_bucket.createFile( new File("/home/xxlong/110.png"));
gfsFile1.setFilename("p23422660.jpg");
gfsFile2.setFilename("110.png");
gfsFile1.save();
gfsFile2.save();
//读取图片信息并保存
/*{
* "filename" : "xxlong_photo" ,
* "aliases" : null ,
* "chunkSize" : 261120 ,
* "uploadDate" : { "$date" : "2015-08-25T05:50:41.881Z"} ,
* "length" : 183271 ,
* "_id" : { "$oid" : "55dc023144ae5da46fb72505"},
* "contentType" : null ,
* "md5" : "1dde2037829359f4e1a6706e9cd4c265"}*/
GridFSDBFile imageForOutput = gfs_bucket.findOne("p23422660.jpg");
System.out.println(imageForOutput);
//保存图片
imageForOutput.writeTo("/home/xxlong/myInstall/new.jpg");
//保存所有图片
List<GridFSDBFile> imgageForOutput_list=gfs_bucket.find(new BasicDBObject()) ;
for(GridFSDBFile imageForOutput1:imgageForOutput_list){
imageForOutput1.writeTo("/home/xxlong/myInstall/"+imageForOutput1.getFilename());
}
//读取所有图片信息,输出所有保存在bucket命名空间下的图片信息
DBCursor cur_bucket = gfs_bucket.getFileList();
while(cur_bucket.hasNext()){
DBObject dbo = cur_bucket.next();
System.out.println(dbo);
}
//删除图片
gfs_bucket.remove("p23422660.jpg");
} catch (Exception e) {
e.printStackTrace();
}
}
}