Java操作mongodb的基本操作
Posted ' '
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java操作mongodb的基本操作相关的知识,希望对你有一定的参考价值。
目录
MongoDB中的文档本质上是一种类似JSON的BSON格式的数据。
BSON是一种类似JSON的二进制格式数据,它可以理解为在JSON基础上添加了一些新的数据类型。
MongoDB的基本操作
首先要导入操作MongoDB所需要的jar包:
Java连接MongoDB数据库
MongoClient mc=new MongoClient("localhost",27017);
MongoDatabase database = mc.getDatabase("myschool");
MongoCollection<Document> collection = database.getCollection("student");
第一句是获取链接对象。
第二句是获取myschool的数据库,如果没有会在添加的时候自动的创建。
第三句是获取名为student的集合,如果没有也会在添加的时候自动的创建
新增
方式一:
package com.ape.select;
import java.util.Date;
import org.bson.Document;
import com.ape.bean.Student;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
public class addDemoGson
public static void main(String[] args)
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
//连接对象
MongoClient mc = new MongoClient("localhost",27017);
//库对象
MongoDatabase db = mc.getDatabase("myschool");
//集合对象
MongoCollection<Document> collection = db.getCollection("student");
Student s =new Student();
s.setBirthday(new Date());
s.setClassid(100);
s.setSid(2);
s.setSname("小王");
s.setSsex("男");
//转换
String json = gson.toJson(s);
System.out.println(json);
collection.insertOne(Document.parse(json));
mc.close();
该种方式进行了手动的解析。
方式二:
package com.ape.add;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.bson.Document;
import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
public class adddemo
public static void main(String[] args)
MongoClient mc=new MongoClient("localhost",27017);
MongoDatabase database = mc.getDatabase("myschool");
MongoCollection<Document> collection = database.getCollection("student");
// Document document = new Document();
// document.put("name", "张三");
// document.put("age", 18);
// document.put("birthday", new Date());
// document.put("sex", "男");
// collection.insertOne(document);
//mc.close();
//添加多条
Document document1 = new Document();
document1.put("name", "张三");
document1.put("age", 18);
document1.put("birthday", new Date());
document1.put("sex", "男");
Document document2 = new Document();
document2.put("name", "张三");
document2.put("age", 18);
document2.put("birthday", new Date());
document2.put("sex", "男");
Document document3 = new Document();
document3.put("name", "张三");
document3.put("age", 18);
document3.put("birthday", new Date());
document3.put("sex", "男");
Document document4 = new Document();
document4.put("name", "张三");
document4.put("age", 18);
document4.put("birthday", new Date());
document4.put("sex", "男");
List<Document>list=new ArrayList<>();
list.add(document1);
list.add(document2);
list.add(document3);
list.add(document4);
collection.insertMany(list);
mc.close();
从所写的代码中看,新增的方法有两种:第一种是添加单条数据的:insertOne(),第二种是可以一次性添加多条数据的:insertMany()。
第一种:
第二种: 5条=1+4
删除:
package com.ape.delete;
import org.bson.Document;
import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.result.DeleteResult;
public class deleteDemo
public static void main(String[] args)
MongoClient mc=new MongoClient("localhost",27017);
MongoDatabase database = mc.getDatabase("myschool");
MongoCollection<Document> collection = database.getCollection("student");
DeleteResult deleteOne = collection.deleteOne(new Document("name","张三"));
System.out.println(deleteOne);
//DeleteResult deleteMany = collection.deleteMany(new Document("name","张三"));
//System.out.println(deleteMany);
mc.close();
从代码上看只是进行了简单的删除,deleteOne()只进行删除符合条件的第一条,deleteMany()是删除了所有符合条件的语句。
删除一条:
删除查到的所有:5-1=4
带条件的删除
package com.ape.delete;
import org.bson.Document;
import org.bson.conversions.Bson;
import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;
import com.mongodb.client.result.DeleteResult;
public class deleteDemo
public static void main(String[] args)
MongoClient mc=new MongoClient("localhost",27017);
MongoDatabase database = mc.getDatabase("myschool");
MongoCollection<Document> collection = database.getCollection("student");
Bson gt = Filters.gt("age", 100);
// Bson exists = Filters.exists("age");//存在年龄的
// Bson exists = Filters.exists("age", false);//不存在年龄的
DeleteResult deleteOne = collection.deleteOne(gt);
System.out.println(deleteOne);
// DeleteResult deleteMany = collection.deleteMany(exists);
// System.out.println(deleteMany);
mc.close();
第一句是年龄大于100的删除
第二句是删除有年龄的人
我们添加了5条所以查到了5条,然后通过deleteMany将他全部的删除。
第三局是删除没有年龄的(先执行了第三个,后执行第二个)
我们在添加的时候给每一条数据都有年龄,所以没有查到数据。
建议使用的时候数据要多样化,能够满足条件。
修改
Filters 该过滤器类为所有的MongoDB的查询操作静态工厂方法。每个方法返回BSON类型,又可以传递给期 望一个查询过滤器的任何方法的一个实例。
修改条件
package com.ape.update;
import org.bson.Document;
import org.bson.conversions.Bson;
import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.UpdateOptions;
import com.mongodb.client.result.UpdateResult;
public class updateDemo
public static void main(String[] args)
MongoClient mc=new MongoClient("localhost",27017);
MongoDatabase database = mc.getDatabase("myschool");
MongoCollection<Document> collection = database.getCollection("student");
//修改条件
// Bson eq = Filters.eq("name","张三");
// UpdateResult updateOne = collection.updateOne(eq, new Document("$set",new Document("age",20)));
// System.out.println(updateOne);
// UpdateResult updateMany = collection.updateMany(eq, new Document("$set",new Document("age",20)));
// System.out.println(updateMany);
//修改添加
// Bson eq = Filters.eq("name","haha");
// UpdateResult updateOne = collection.updateOne(eq,
// new Document("$set",new Document("age",16)),
// new UpdateOptions().upsert(true));
// System.out.println(updateOne);
//matchedCount=0, modifiedCount=0, 查到0个,修改0个
//upsertedId=BsonObjectIdvalue=631fe6a20a395b2479cd6205
//多条件
Bson lte = Filters.lte("age", 30);
Bson gte = Filters.gte("age", 10);
Bson and = Filters.and(gte,lte);
UpdateResult updateMany = collection.updateMany(and, new Document("$set",new Document("sex","保密")));
System.out.println(updateMany);
//有的改不了的是类型的问题不是int型,是String
//对年龄增加100
// UpdateResult updateMany = collection.updateMany(and, new Document("$inc",new Document("age",5)));
mc.close();
updateOne()是修改一条,updateMany()是修改多条。
修改的条件是name位张三的。
第一条updateOne:age由18变为20
第二条updateMany:
共有19条其中有16条的age!=20,讲着16条全变为20。
修改并添加
查到0个,修改为0个,但是有修改id。加上这句:
就会在没有的时候去新增一条。
多条件修改:
小于30且大于10的都进行修改,性别改为保密。
原数据
修改后
查询
普通查询
package com.ape.select;
import java.util.ArrayList;
import org.bson.Document;
import com.ape.bean.Student;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
public class demo
public static void main(String[] args)
MongoClient mc=new MongoClient("localhost",27017);
MongoDatabase database = mc.getDatabase("myschool");
MongoCollection<Document> collection = database.getCollection("student");
FindIterable<Document> find = collection.find();
for (Document document : find)
System.out.println(document);
mc.close();
条件查询
多条件查询
模糊查询:
查询除来的结果有两种的显示方式:
第一种是代码中所使用的增强 for循环。
第二种是使用迭代器的方式。
怎么使用java操作mongodb更新整个文档
参考技术A 上篇博客介绍了java操作mongoDB进行对文件的处理。现在来介绍一下对文档的处理。和对文件的处理一样,也是通过java驱动中提供的几个类相互作用完成的。这几个类分别是:DBCollection类:指定数据库中指定集合的实例,提供了增删改查等一系列操作。在关系型数据库中,对数据的增删改查操作是建立在表的基础上的,在mongodb中是建立在集合的基础上进行的。
DBObject接口:DBObject是键值的映射,因此,可以将DBObject的实现类作为查询的返回结果,也可以作为查询条件
DBCursor:游标,返回结果的集合。
下面是部分实例:
[java] view plaincopy
Mongo mongo = new Mongo();
DB db = mongo.getDB("myMongoDB");
DBCollection course = db.getCollection("course");//对myMongoDB数据库中course集合进行操作
//添加操作
//下面分别是创建文档的几种方式:1. .append() 2. .put() 3. 通过map 4. 将json转换成DBObject对象
DBObject english = new BasicDBObject().append("name","english").append("score", 5).append("id",1);
course.insert(english);
DBObject math = new BasicDBObject();
math.put("id", 2);
math.put("name", "math");
math.put("score", 10);
course.insert(math);
Map<String,Object> map = new HashMap<String,Object>();
map.put("name","physics" );
map.put("score", 10);
map.put("id", 3);
DBObject physics= new BasicDBObject(map);
course.insert(physics);
String json ="'name':'chemistry','score':10,'id':4";
DBObject chemistry =(DBObject)JSON.parse(json);
course.insert(chemistry);
List<DBObject> courseList = new ArrayList<DBObject>();
DBObject chinese = new BasicDBObject().append("name","chinese").append("score", 10).append("id", 5);
DBObject history = new BasicDBObject().append("name", "history").append("score", 10).append("id", 6);
courseList.add(chinese);
courseList.add(history);
course.insert(courseList);
//添加内嵌文档
String json2 =" 'name':'english','score':10,'teacher':['name':'柳松','id':'1','name':'柳松松','id':2]";
DBObject english2= (DBObject)JSON.parse(json);
course.insert(english2);
List<DBObject> list = new ArrayList<DBObject>();
list.add(new BasicDBObject("name","柳松").append("id",1));
list.add(new BasicDBObject("name","柳松松").append("id",2));
DBObject english3= new BasicDBObject().append("name","english").append("score",10).append("teacher",list);
//查询
//查询所有、查询一个文档、条件查询
DBCursor cur = course.find();
while(cur.hasNext())
DBObject document = cur.next();
System.out.println(document.get("name"));
DBObject document = course.findOne();
String name=(String)document.get("name");
System.out.println(name);
//查询学分=5的
DBObject query1 = new BasicDBObject("score",5);
DBObject query2 = new BasicDBObject("score",new BasicDBObject("$gte",5));
DBCursor cur2 = course.find(query2);
//条件表达式:$ge(>) $get(>=) $lt(<) $lte(<=) $ne(<>) $in $nin $all $exists $or $nor $where $type等等
//查找并修改
DBObject newDocument = course.findAndModify(new BasicDBObject("score",5), new BasicDBObject("score",15));
//更新操作
//q:更新条件 o:更新后的对象
course.update(new BasicDBObject("score",10), new BasicDBObject("test",15));
course.update(new BasicDBObject("score",15), new BasicDBObject("$set",new BasicDBObject("isRequired",true)));
//两个的区别是,第一个更新是将"test":15这个文档替换原来的文档,
//第二个更新添加了条件表达式$set,是在原来文档的基础上添加"isRequired"这个键
//条件表达式:$set $unset $push $inc $push $push $addToSet $pull $pullAll $pop等等
//当_id相同时,执行save方法相当于更新操作
course.save(new BasicDBObject("name","math").append("_id", 1));
course.save(new BasicDBObject("name","数学").append("_id", 1));
//删除符合条件的文档
course.remove(new BasicDBObject("score",15));
//删除集合及所有文档
course.drop();<span style="font-family:Arial, Helvetica, sans-serif;"><span style="white-space: normal;">
</span></span>
上面只是介绍了一些简单的操作,具体复杂的查询更新可以根据需求再去查找文档资料。其实,不管操作简单还是复杂,其核心都是对DBObject和DBCollection的操作,主要掌握DBObject如何构造键值对,以及一些条件表达式。本回答被提问者和网友采纳
以上是关于Java操作mongodb的基本操作的主要内容,如果未能解决你的问题,请参考以下文章
MongoDB--Java 操作 MongoDB 的 API