`

mongodb

阅读更多
MongoDB[2]  是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引存储的结构主要是以文档结构存储。

MongoDB 的设计目标是高性能、可扩展、易部署、易使用,存储数据非常方便。其主要功能特性如下。
(1)面向集合存储,容易存储对象类型的数据。在MongoDB 中数据被分组存储在集合中,集合类似RDBMS 中的表,一个集合中可以存储无限多的文档。
(2)模式自由,采用无模式结构存储。在MongoDB 中集合中存储的数据是无模式的文档,采用无模式存储数据是集合区别于RDBMS 中的表的一个重要特征。
(3)支持完全索引,可以在任意属性上建立索引,包含内部对象。MongoDB的索引和RDBMS 的索引基本一样,可以在指定属性、内部对象上创建索引以提高查询的速度。除此之外,MongoDB 还提供创建基于地理空间的索引的能力。
(4)支持查询。MongoDB 支持丰富的查询操作,MongoDB 几乎支持SQL中的大部分查询。
(5)强大的聚合工具。MongoDB 除了提供丰富的查询功能外,还提供强大的聚合工具,如count、group 等,支持使用MapReduce 完成复杂的聚合任务。
(6)支持复制和数据恢复。MongoDB 支持主从复制机制,可以实现数据备份、故障恢复、读扩展等功能。而基于副本集的复制机制提供了自动故障恢复的功能,确保了集群数据不会丢失。
(7)使用高效的二进制数据存储,包括大型对象(如视频)。使用二进制格式存储,可以保存任何类型的数据对象。
(8)自动处理分片,以支持云计算层次的扩展。MongoDB 支持集群自动切分数据,对数据进行分片可以使集群存储更多的数据,实现更大的负载,也能保证存储的负载均衡。
(9)支持Perl、PHP、Java、C#、JavaScript、Ruby、C 和C++语言的驱动程序,MongoDB 提供了当前所有主流开发语言的数据库驱动包,开发人员使用任何一种主流开发语言都可以轻松编程,实现访问MongoDB 数据库。
(10)文件存储格式为BSON(JSON 的一种扩展)。BSON 是对二进制格式的JSON 的简称,BSON 支持文档和数组的嵌套。
(11)可以通过网络访问。可以通过网络远程访问MongoDB 数据库



mongodb 简介:http://baike.baidu.com/link?url=63fcML-w5OtG3DVirncnrllJ1D2X57rElq20Drf_r6mJqoJrHFv4XSZ1c4P4tE0ArZNZW4YSZm-StOkkYyC-9_
mongodb和关系性数据库的优缺点对比:http://blog.sina.com.cn/s/blog_966e430001019s8v.html
mongodb的常用命令:http://www.jb51.net/article/48217.htm

链接数据库 mongo 192.168.x.xx:27017/admin
db.auth("username","passwprd")认证。
show dbs:显示数据库列表
show collections:显示当前数据库中的集合(类似关系数据库中的表)
show users:显示用户
use <db name>:切换当前数据库,这和MS-SQL里面的意思一样
db.help():显示数据库操作命令,里面有很多的命令
db.foo.help():显示集合操作命令,同样有很多的命令,foo指的是当前数据库下,一个叫foo的集合,并非真正意义上的命令
db.foo.find():对于当前数据库中的foo集合进行数据查找(由于没有条件,会列出所有数据)
db.foo.find( { a : 1 } ):对于当前数据库中的foo集合进行查找,条件是数据中有一个属性叫a,且a的值为1


package First.com.downjoy.first;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.query.Query;

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.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoCredential;
import com.mongodb.MongoException;
import com.mongodb.ServerAddress;
import com.mongodb.WriteResult;
import com.mongodb.util.JSON;

import entity.User;
/**
 *  Mongo:连接服务器,执行一些数据库操作的选项,如新建立一个数据库等
    DB:对应一个数据库,可以用来建立集合等操作
    DBCollection:对应一个集合(类似表),可能是我们用得最多的,可以添加删除记录等
    DBObject接口和BasicDBObject对象:表示一个具体的记录,BasicDBObject实现了DBObject,是key-value的数据结构,用起来和HashMap是基本一致的。
    DBCursor:用来遍历取得的数据,实现了Iterable和Iterator
 * @author kun.zhang@downjoy.com
 *
 *
 */
public class MongodbTest {
	private static final String dbName ="test";
	private  static Mongo mongo;
	private static DB db;	
	private static char[] password = "Pwd-monGo-321".toCharArray();
	private static  final ServerAddress serverAddress1 = new ServerAddress("192.168.9.25",27017);
	
	static{	
		try{
			//权限认证:
			MongoCredential mongoCredential = MongoCredential.createCredential("super-user", "admin", password);
			List<MongoCredential> credentialsList  = new ArrayList<MongoCredential>();
			credentialsList.add(mongoCredential);
			//链接ip端口和数据库
			mongo = new MongoClient(serverAddress1,credentialsList,MongoClientOptions.builder().build());
			
			db = new DB(mongo, dbName);
			System.out.println("数据库链接成功");
		}
		catch(MongoException  e){
			e.printStackTrace();
		}
	}
	/**
	 * 判断文档是否存在:
	 * @param name
	 * @return
	 */
	public static boolean CollectionsExists(String name){	
		return db.collectionExists(name);
	}
	/**
	 * 查询单个按照主建查询
	 * @param id
	 * @param name
	 */
	public static void findById(String id,String name){
		Map<String,Object> map = new Hashtable<String, Object>();
		map.put("_id", id);
		findOne(map,name);
		
	}
	public static void findOne(Map<String, Object> map, String name) {
		DBObject dbObject = getMapped(map);
		DBObject object = getCollection(name).findOne(dbObject);
		
	}
	/**
	 * 根据名字获取指定的集合
	 * @param name
	 * @return
	 */
	public  static DBCollection getCollection(String name) {	
		return db.getCollection(name);
	}
	private static DBObject getMapped(Map<String, Object> map) {
		return  (DBObject) (map =new Hashtable<String, Object>());
	}
	/**
	 * 插入数据
	 * @param name 集合名
	 */
	public static void insertJson(String name){
		String jsonData = "{'a1':'1','a2':'2',"+"'detail':{'resords':99,'index':'vps_index','active':'true'}}}";
		DBObject dbObject = (DBObject) JSON.parse(jsonData);
		DBCollection collection = getCollection(name);
		collection.insert(dbObject);
		DBCursor cursor = collection.find();//获取刚刚插入的数据
		while(cursor.hasNext()){
			System.out.println(cursor.next());
		}
	}
	/**
	 * 获取所有的集合
	 */
	public void testGetAllCollections(){
		Set<String> setCollections = db.getCollectionNames(); 
		for (String string : setCollections) {
			System.out.println("所有集合:"+string);
		}
	}
	/**
	 * 查询所有用户信息
	 */
	public void findUser(){		
	}
	/**
	 * 初始化数据
	 */
	public void testInit(String name){
		//获取一个集合想到与数据库中的表,如果没有就创建这个collection 
		DBCollection collection = getCollection(name);
		//删除数据库中的数据 相当于数据库中的表
		collection.drop();
		BasicDBObject basicDBObject = new BasicDBObject();
		String jsondata = "{'a':1,'b':2,'c':{'c1':'c1','c2':'c2'}}";
		basicDBObject = (BasicDBObject) JSON.parse(jsondata);
		basicDBObject.put("name", "name1");
		basicDBObject.put("type", "type1");
		basicDBObject.put("count", 2);
		BasicDBObject info = new BasicDBObject();
		info.put("x", 203);
		info.put("y", 102);
		basicDBObject.put("info", info);
		collection.insert(basicDBObject);//这一张表中插入数据
		//批量插入
		List datas = new ArrayList();
		for(int i=0;i<10;i++){
		 BasicDBObject bs = new BasicDBObject();
		 bs.put("name", "meinv");
		 bs.append("age",i);
		 datas.add(bs);	 
		}
		collection.insert(datas);		
		testFind(name);		
	}
	/**
	 * 查找集合中第一个文档
	 * @param name
	 */
	public void testfindone(String name){
		DBCollection collection = getCollection(name);
		System.out.println("统计文档的数量:"+collection.getCount());
		DBObject db = collection.findOne();
		System.out.println(db);
	}
	/**
	 * 使用光标来获取全部文档
	 * @param name
	 */
	public void testFind(String name){
		DBCollection collection = getCollection(name);
        DBCursor cursor =		collection.find();
        for (DBObject dbObject : cursor) {
			System.out.println("文档内容:"+dbObject);
		}	
	}
	/**
	 * 通过指定条件查询
	 * @param name
	 * @param i
	 */
	public void testQuery(String name,int i){
		DBObject query = new BasicDBObject();
		DBCollection collection = getCollection(name);
		query.put("age", i);
		DBCursor cursor = collection.find(query);
		for (DBObject dbObject : cursor) {
			System.out.println(dbObject);
		}	
	}	
	public void addUser(String name){
		testFind(name);
		DBCollection collection = getCollection(name);
		System.out.println("count:"+collection.count());
		DBObject dbObject = new BasicDBObject();
		//存入字段
		dbObject.put("name", "meinv");
		dbObject.put("id", 123l);
		System.out.println(collection.save(dbObject).getN());//获取影响行数
		//存入多个字段
		System.out.println(collection.insert(new BasicDBObject("key","value"),new BasicDBObject("key1","value1")));
		//存入一个集合
		//List<DBObject> list = new ArrayList<DBObject>();
		//list.add(dbObject);
		//System.out.println(collection.insert(list).getN());
		testFind(name);
	}	
	/**
	 * 根据传入的类型来判读移除
	 * @param name
	 * @param index
	 */
	public void remove(String name,Object index){
		testFind(name);
		DBObject dbObject = null;
		DBCollection collection = getCollection(name);
		if(index instanceof Long){
			dbObject= new BasicDBObject("id",index);
		}else{
			 dbObject = new BasicDBObject("key",index);	
	    }
		System.out.println((collection.remove(dbObject)).getN());
		testFind(name);
       }
/**
 * 条件移除  mongoDB提供了比较操作符,$lt(<),$lte(<=),$gt(>),$gte(>=),$ne(!=)
 * @param name
 * @param i
 */
   public void  removeExpend(String name,Integer i  ){
	   testFind(name);
		DBObject dbObject = null;
		DBCollection collection = getCollection(name);
		//移除年龄大于i的数据
		dbObject =new BasicDBObject("age", new BasicDBObject("$gte",i)) ;
		System.out.println(collection.remove(dbObject).getN());
		testFind(name);
   }  
   /**
    * 修改
    * @param name
    * @param id
    * @param age
    */
   public void updateUser(String name,Long id,Integer age){
	   testFind(name);
	   DBObject dbObject = null;
	   DBCollection collection = getCollection(name);
	   dbObject = new BasicDBObject("_id",id);
	  //修改编号为id 的年龄 true 表示如果数据库没有是否添加 ,false 表示如果存在多条数据,就修改
	  WriteResult writeResult = collection.update(dbObject, new BasicDBObject("age",age), true, false);
	  System.out.println(writeResult.getN());
	  testFind(name);  
   }  
}


mongodb查询获取对象转换

package First.com.downjoy.first;
import java.util.List;
import org.mongodb.morphia.Datastore;
import org.mongodb.morphia.dao.BasicDAO;
import org.mongodb.morphia.query.Query;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import entity.User;
public class UserServiceMongo extends BasicDAO<User, String>{	
	public MongodbTest mongodbTest;
	public UserServiceMongo(Class<User> entityClass, Datastore ds) {
		super(entityClass, ds);
	}
	/**
	 * 存入一个对象。相当于把这个对象当做一个集合列表来存。
	 * @param name
	 */
	public void testClassCon(String name){
		User user = new User();
		user.setAge(18);
		user.setId(1202l);
		user.setName("meinv");
		user.setWife("meinv");
		MongodbTest mongodbTest = new MongodbTest();
		DBCollection collection = mongodbTest.getCollection(name);
		collection.drop();
		this.save(user);
		DBCursor cursor = collection.find();
		while(cursor.hasNext()){
			System.out.println(cursor.next());
		}
		System.out.println(user.getAge());	
	}	
	/** 
	 * Datastore ds = ...  
     * Query q = ds.createQuery(MyEntity.class).filter("foo >", 12);  
     * Datastore ds = ... Query q = ds.createQuery(MyEntity.class).filter("foo >", 12);
	 * filter(..)方法过滤  filter("foo >", 12)
	 * Fields fluent 接口以field(name)开始。接着一下任何一个方法都可以添加到这个格式中, 流式查询接口
	 * 将查询出来的数据转成一个list列表 通过Query spring -data -mongodb 已经配置文件
	 *  //is相当于等于  
     *  in相当于sql中的in  
     *  ne相当于不等于  
     *  orOperator接受多个条件,组成or逻辑
	 */
	public void updateUser(){
		Query<User> query = createQuery();
		List<User> userList = query.asList();
		for(int i=0;i<userList.size();i++){
			User user = userList.get(i);
			System.out.println(user.getWife());
		}
	}
}


package First.com.downjoy.first;
import mongo.ext.DataStoreFactoryBean;
import mongo.ext.MongoClientOption;
import mongo.ext.MongoFactoryBean;
import org.junit.Test;
import org.mongodb.morphia.Morphia;
import com.mongodb.MongoClient;
import entity.User;
public class TestRedis {	
	MongodbTest mongodbTest = new MongodbTest();
	//@Test
    public void test1(){
		RedisTest redisTest = new RedisTest();
		redisTest.show();	
	}
   @Test
    public void test2() throws Exception{
    	//mongodbTest.insertJson("test");
    	//mongodbTest.testGetAllCollections();
    	//mongodbTest.testInit("user");
    	//mongodbTest.testfindone("user");
    	//mongodbTest.testFind("user");
    	//mongodbTest.testQuery("user", 7);
    	MongoFactoryBean mongoFactoryBean = new MongoFactoryBean();
    	mongoFactoryBean.setMongoOption(new MongoClientOption());
    	mongoFactoryBean.setReadSecondary(true);
    	mongoFactoryBean.setServerStrings(new String[]{"192.168.9.25:27017"});
    	mongoFactoryBean.setCredentialStrings(new String[]{"admin:super-user:Pwd-monGo-321"});
    	DataStoreFactoryBean bean = new DataStoreFactoryBean();
    	bean.setDbName("test");
    	bean.setMongo((MongoClient)mongoFactoryBean.createInstance());
    	Morphia morphia = new Morphia();
    	morphia = morphia.map(User.class);
    	bean.setMorphia(morphia);
    	UserServiceMongo userServiceMongo = new UserServiceMongo(User.class, bean.createInstance());
//		User user = new User();
//		user.setAge(20);
//		user.setId(1207l);
//		user.setName("meinv");
//		user.setWife("meinv");
//		userServiceMongo.save(user);
    	//userServiceMongo.testClassCon("user");	
    	userServiceMongo.updateUser();
    }
    //@Test
    public void testMongodb(){
    	//mongodbTest.addUser("user");
    	//mongodbTest.remove("user", 123l);
    	//mongodbTest.removeExpend("user", 19);
    	mongodbTest.updateUser("user", 1202l, 17);
    }
    
}


这里说明一下,转成对象,是通过Spring -data -mongodb API实现的,可以通过配置文件实现 :http://my.oschina.net/fengshuzi/blog/346303

















分享到:
评论

相关推荐

    Linux安装mongodb客户端

    sudo vim /etc/yum.repos.d/mongodb-org-4.2.repo 写入: [mongodb-org-4.2] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/ gpgcheck=1 enabled=1 gpg...

    MongoDB应用设计模式

    资源名称:MongoDB应用设计模式内容简介:无论是在构建社交媒体网站,还是在开发一个仅在内部使用的企业应用程序,《MongoDB应用设计模式》展示了MongoDB需要解决的商业问题之间的连接。你将学到如何把MongoDB设计...

    MongoDB(mongodb-org-server_5.0.4_amd64.deb)

    MongoDB Community Server(mongodb-org-server_5.0.4_amd64.deb)适用于适用于Debian10 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是...

    MongoDB Community(mongodb-linux-aarch64-ubuntu1804-5.0.8.tgz)

    MongoDB Community Server(mongodb-linux-aarch64-ubuntu1804-5.0.8.tgz)适用于Ubuntu 18.04 Arm芯片, MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决...

    MongoDB(mongodb-src-r5.0.4.tar.gz)

    MongoDB Community Server(mongodb-src-r5.0.4.tar.gz)源代码 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和非...

    mongodb-linux-x86_64-4.0.18.tgz

    mv mongodb-linux-x86_64-4.0.18 mongodb 3、进入 mongodb 目录创建目录 db 和 logs cd /usr/local/mongodb mkdir db mkdir logs 4、进入到 bin 目录下,编辑 mongodb.conf 文件,内容如下: dbpath=/usr/local/...

    基于MongoDB的日志系统Mongodb-Log.zip

    mongodb-log 是一个基于MongoDB的Python日志系统。 MongoDB 的 Capped Collection是一个天生的日志系统,MongoDB自己的oplog就是用它来存储的,Capped Collection的特点是可以指定Collection的大小,当记录总大小...

    mongodb-driver-core-4.2.3-API文档-中文版.zip

    赠送jar包:mongodb-driver-core-4.2.3.jar; 赠送原API文档:mongodb-driver-core-4.2.3-javadoc.jar; 赠送源代码:mongodb-driver-core-4.2.3-sources.jar; 赠送Maven依赖信息文件:mongodb-driver-core-4.2.3....

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

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

    2020年最新MongoDB 4.0专讲从入门到精通视频教程.txt

    day1:MongoDB数据库与其他数据库区别介绍及学习方法 day2:MongoDB运行环境搭建及运行 day3:MongoDB增删改查操作实践 day4:教你学会MongoDB聚合操作 day5:索引的特性及应用 day6:MongoDB实例搭建仓位管理API day7:...

    php-mongodb的扩展包

    php-mongodb的扩展包,MongoDB [2] 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据...

    如何安装MongoDB 如何使用MongoDB

    本课程是一套关于MongoDB应用开发的实战性教程,名为《深入浅出MongoDB应用实战开发(基础、开发指南、系统管理、集群及系统架构)》,教程侧重于讲解MongoDB的常用特性及高级特性,从实际开发的角度出发对MongoDB...

    MongoDB笔记.docx

    一、MongoDB简介 3 二、MongoDB结构 3 二、MongoDB 数据库关系型(这里并不是值关系型数据库的关系) 3 1、MongoDB一对一关系型 3 2、MongoDB一对多关系型 4 3、MongoDB多对多关系型 4 三、创建数据库(mongodb_test...

    MongoDB教程基础入门

    教程名称:MongoDB教程基础入门 课程目录:【】MongoDB教程基础入门-代码【】MongoDB教程基础入门01第一讲上【】MongoDB教程基础入门02第一讲下【】MongoDB教程基础入门03第二讲上【】MongoDB教程基础入门04第二讲...

    MongoDB(mongodb-windows-x86_64-5.0.4.zip)

    MongoDB Community Server(mongodb-windows-x86_64-5.0.4.zip)适用于Windows MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于...

    【BAT必备】MongoDB面试题

    【BAT必备】MongoDB面试题【BAT必备】MongoDB面试题【BAT必备】MongoDB面试题【BAT必备】MongoDB面试题【BAT必备】MongoDB面试题【BAT必备】MongoDB面试题【BAT必备】MongoDB面试题【BAT必备】MongoDB面试题【BAT...

    MongoDB图形化管理工具 MongoDB Compass

    MongoDB图形化管理工具 MongoDB Compass

    MongoDB4.2分片及副本集群搭建

    MongoDB4.2分片及副本集群搭建 MongoDB集群 MongoDB分片 MongoDB副本 MongoDB副本集群

    Windows上安装MongoDB:完整步骤详解.pdf

    mongodb安装 《Windows上安装MongoDB:完整步骤详解.pdf》是一份适用于Windows操作系统的MongoDB安装教程,适用于初学者和有经验的开发人员。本教程包括完整的步骤详解,可帮助您快速掌握MongoDB的安装配置,包括...

    MONGOdb视频教程地址.txt

    真实有效的mongodb视频教程地址 深入浅出 MongoDB 高清IT教程视频下载 1.1、-nosql与MongoDB.mp4 1.2、-MongoDB安装配置.mp4 1.3、-MongoDB?shell详.mp4 1.4、-MongoDB文档、集合、数据库的概念.mp4 1.5、-...

Global site tag (gtag.js) - Google Analytics