`
hdxiong
  • 浏览: 376984 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MongoDB——Java操作(增删改查)

阅读更多
Java操作MongoDB,下面是一个完整的例子。本实例需导入mongo-2.5.3.jar

import java.net.UnknownHostException;
import java.util.Iterator;
import java.util.Set;

import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.Mongo;
import com.mongodb.MongoException;

public class MongoMain {
	
	static DB db = null;
	static DBCollection coll = null;
	
	static {
		 Mongo m = null;
		try {
			//m = new Mongo();//默认本地
			//m = new Mongo("127.0.0.1");//默认端口
			m = new Mongo("127.0.0.1",27017);
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (MongoException e) {
			e.printStackTrace();
		}
		
		//获取名为 test 的数据库,不存在的情况下创建
		db = m.getDB("test");
		
		//登录数据库(用户名:test,密码:test)
		boolean auth = db.authenticate("test", "test".toCharArray());
		if(auth){
			//只有admin中的用户才有此权限(show dbs)
			//获取所有数据库,不显示无collection的db
			//System.out.println("所有数据库名:"+m.getDatabaseNames());
			
			//获取名为 user 的collection(相当于表),不存在的情况下创建
			coll = db.getCollection("user");
		}else{
			System.out.println("登录失败!");
		}
	}
	
	public static void main(String[] args) {
		MongoMain test = new MongoMain();
		if(coll!=null){
			test.saveData();
			test.searchData();
			test.updateData();
			test.deleteData();
		}
	}

	/**
	 * 保存数据
	 */
	public void saveData(){
		//录入学生1的信息
		BasicDBObject stu1 = new BasicDBObject();
		stu1.put("name", "jack");
		stu1.put("age", "25");
		BasicDBObject sight1 = new BasicDBObject();
		sight1.put("left", 1.5);
		sight1.put("right", 1.2);
		stu1.put("sight", sight1);
		
		//录入学生2的信息
		BasicDBObject stu2 = new BasicDBObject();
		stu2.put("name", "lucy");
		stu2.put("age", "22");
		BasicDBObject sight2 = new BasicDBObject();
		sight2.put("left", 1.0);
		sight2.put("right", 1.3);
		stu2.put("sight", sight2);
		
		//注意:不能直接对sight赋值{left:1.0,right:1.3}
		
		coll.insert(stu1);
		coll.insert(stu2);
	}
	
	/**
	 * 查询数据
	 */
	public void searchData(){
		System.out.println("=======================");
		//show collections
		//获取数据库下所有的collection,不显示无数据的collection
		Set<String> colls = db.getCollectionNames();
		showData(colls);
		
		System.out.println("=======================");
		
		//查询coll中全部记录 
		DBCursor ite = coll.find();  
		showData(ite);
		
		System.out.println("=======================");
		
		//获取第一条记录
		DBObject o = coll.findOne();
		System.out.println(o);
		
		System.out.println("=======================");
		
		//统计colletion的数据条数
		System.out.println(coll.getCount());
		
		System.out.println("=======================");
		
		//查询 name为jack的对象 
		BasicDBObject query = new BasicDBObject();
		query.put("name", "jack");
		DBCursor it = coll.find(query);  
		showData(it);
		
		System.out.println("=======================");
		
		//查询age小于30,age不等于20的对象 
		BasicDBObject query2 = new BasicDBObject();
		query2.put("age", new BasicDBObject("$lt", 30));
		query2.put("age", new BasicDBObject("$ne", 20));
		DBCursor it2 = coll.find(query2);  
		showData(it2);
	}
	
	/**
	 * 修改数据
	 */
	public void updateData(){
		BasicDBObject query = new BasicDBObject();
		query.put("name", "lucy");
		//这里的new_info对象一定要是find出的而不是new的,否则多字段的情况下就会丢失其它字段信息
		DBObject new_info = coll.findOne(query);
		
		//方法一(缺点,必须把2个值都put进去)
		BasicDBObject sight = new BasicDBObject();
		sight.put("left", 1.3);
		sight.put("right", 1.3);
		new_info.put("sight", sight);
		
		//方法二(优点,只需设置要修改的字段的值)
		DBObject obj = (DBObject)new_info.get("sight");
		obj.put("right", 1.5);
		
		coll.update(query, new_info);
	}
	
	/**
	 * 删除数据
	 */
	public void deleteData(){
		BasicDBObject data = new BasicDBObject();
		//删除名称为lucy的记录
		data.put("name", "lucy");
		//传入[空实例]删除所有
		coll.remove(data);
	}
	
	/**
	 * 遍历显示结果
	 * @param result
	 */
	@SuppressWarnings("rawtypes") 
	public void showData(Iterable result){
		Iterator it = result.iterator(); 
		while(it.hasNext())  
		{  
			System.out.println(it.next());  
		}  
    }  
}
分享到:
评论
4 楼 添子明 2014-05-16  
初学,留着慢慢研究
3 楼 hdxiong 2012-08-24  
zxl10059 写道
不能登陆,why?

什么错误。如果启动时设置了验证参数,才需要登录,否则不用登录。
2 楼 zxl10059 2012-07-17  
不能登陆,why?
1 楼 xgc329913281 2011-07-07  
 

相关推荐

    springboot集成mongodb增删改查功能源码

    我们将以一个具体的实例——员工表为例,来阐述这一过程。 首先,我们需要理解Spring Boot的核心概念。Spring Boot是Spring框架的一个简化版本,它提供了一种快速开发全新Spring应用的方式。它通过自动配置和起步...

    个人生活助手——java

    6. **个人信息维护**:这部分可能涉及到对用户基本信息的增删改查操作,需要编写对应的DAO(Data Access Object)层和Service层代码,以处理业务逻辑。 7. **个人密码修改**:为了保障用户安全,密码通常会被加密...

    基于MongoDb的图书管理系统.rar

    代码不是很完美,基本实现图书管理系统的增删改查等基本功能,目前尚有一处缺陷未解决——在查询后只能在控制台看到结果,没有反馈到界面上,有兴趣的朋友可以加以修改,相信这是一个不错的Java+MongoDb的课程设计...

    Web_006.zip

    总结,这个"Web_006.zip"压缩包可能是一个简单的Web应用示例,展示了如何在不依赖特定框架的情况下执行数据库的增删改查操作。深入研究这个文件将提供宝贵的学习机会,尤其是对于那些希望了解Web应用底层工作原理的...

    毕业设计 学生宿舍管理系统 技术找 前端Vue 后端 Node 数据库MongoDB.zip

    在本系统中,Node.js作为服务器端,负责处理HTTP请求,实现数据的增删改查和业务逻辑。常见的Node.js后端框架如Express或Koa可以被用于构建API接口,实现前后端分离。 3. 数据库选择:MongoDB MongoDB是一款基于...

    自动健康填报————源码

    5. API设计:后端源码会包含处理HTTP请求的路由和控制器,实现增删查改等操作,并返回JSON格式的数据。 6. 报表与分析:这部分源码涉及数据聚合、过滤和可视化,可能用到统计库(如Pandas)和图表库(如D3.js)。 ...

    html前后台——模板

    后台部分,开发者通常会结合服务器端语言,如PHP、Python、Node.js或Java,以及数据库技术(MySQL、MongoDB等),构建API接口,处理HTTP请求,与数据库交互,完成数据的增删改查。前后端之间通过JSON格式交换数据,...

    webgis项目——美食

    4. **后端开发**:后端通常使用Java、Python、Node.js等语言开发,与数据库交互,处理用户请求,如美食数据的增删改查。可能涉及的框架有Spring Boot、Django或Express等。 5. **数据库设计**:数据库是存储美食...

    【Java后端开发】教程及案例.docx

    - **非关系型数据库**:了解MongoDB等NoSQL数据库的特点,学会基本的操作(如文档的增删改查)。 3. **Web技术** - **HTTP协议**:理解HTTP协议的工作原理,包括请求/响应消息格式、状态码等。 - **RESTful API...

    springMvcPlusMongo-master.zip

    配置完成后,应用程序就能与MongoDB服务器进行通信,执行增、删、查、改等操作。 接下来,我们转向Spring MVC。Spring MVC是Spring框架的一部分,用于构建Web应用。它采用模型-视图-控制器架构,使得业务逻辑、数据...

    数据库工具大全.pdf

    SQLExplorer提供了一个GUI,可以查看表格、结构、数据,以及进行数据的增删改查,还能生成SQL脚本。不过,其授权协议和开发语言信息未明确给出。 5. **phpMyAdmin**:这是一个流行的基于Web的MySQL数据库管理工具,...

    飞机票管理系统.zip

    首先,飞机票管理系统的核心是航班信息的增删改查功能。这一部分主要涉及到数据结构的设计和运用。在数据库中,航班信息通常以表格的形式存储,这需要利用到链表、数组或哈希表等数据结构。链表允许快速插入和删除,...

    基于Android的智能停车诱导系统源码数据库.zip

    通过分析源码,我们可以学习到如何使用SpringBoot构建RESTful API,以及如何与数据库进行高效交互,实现数据的增删改查操作。 提到数据库,这里可能使用了关系型数据库如MySQL或非关系型数据库如MongoDB,用于存储...

    水果管理系统webFruitSys.zip

    3. 数据访问层:Servlet通过这一层与数据库进行交互,完成数据的增删改查操作。可能使用JDBC(Java Database Connectivity)或者ORM(Object-Relational Mapping)框架如Hibernate或MyBatis来简化数据库操作。 4. ...

    《数据库课程设计》_大作业_电脑销售信息管理系统_作品二.rar

    2. 后端接口:处理前端请求,与数据库交互,实现数据的增删改查。 3. 数据库连接池:提高数据库连接的复用率,减少资源消耗。 五、系统功能分析 1. 商品管理:添加、修改、删除电脑型号信息,包括品牌、配置、价格...

    基于spring boot 开发,上课考勤系统毕业设计,该系统设计获得优秀毕业设计

    数据库的设计应该包括学生信息表、课程信息表、考勤记录表等,通过SQL查询语句进行数据的增删改查,确保数据的安全性和一致性。 此外,系统的亮点之一是小程序前端的GPS签到功能。利用微信小程序的开放接口,开发者...

    mall-shop项目建造了一个前后端分离的电商小程序项目.zip

    2. 开发后端API:编写处理请求的控制器,实现数据增删改查等功能。 3. 创建前端页面:设计小程序页面结构,编写WXML和WXSS,实现页面跳转和数据渲染。 4. 接口联调:前端调用后端API,确保数据传输正确无误。 5. ...

    产品信息管理系统-基于药品信息管理系统的设计与开发-毕业设计+毕业论文

    例如,药品入库和出库需要记录详细的交易信息,库存管理则需实时更新库存状态,有效期跟踪提醒过期药品,供应商管理则涉及供应商信息的增删改查,用户权限控制则保证不同角色的用户访问权限差异。 此外,系统的安全...

    k-push(含后端)_微信小程序模板js代码前台前端H5页面源码+后台源码.rar

    2. API设计:后端提供与前端通信的RESTful API,处理数据增删改查、验证授权等功能。例如,`/push`接口用于发送推送消息,`/user`接口处理用户注册登录等操作。 3. 数据库交互:后端代码通常会涉及数据库操作,如...

    通用后台管理

    2. 数据管理:对各类业务数据进行增删改查操作,支持数据导入导出、备份恢复等。 3. 权限控制:根据角色和用户分配不同的操作权限,实现细粒度的权限管理。 4. 流程审批:实现工作流的自动化处理,如请假申请、报销...

Global site tag (gtag.js) - Google Analytics