Java操作mongodb的基本操作

Posted ' '

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java操作mongodb的基本操作相关的知识,希望对你有一定的参考价值。

目录

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的基本操作的主要内容,如果未能解决你的问题,请参考以下文章

如何用java操作mongodb

怎么使用java操作mongodb更新整个文档

MongoDB--Java 操作 MongoDB 的 API

java操作mongodb之后需要断开连接么

MongoDB Java 学习笔记 (Java操作MongoDB)

mongodb java操作常用写法