`

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功能的样例数据集,特别是针对增、删、改、查(CRUD)操作的学习...

    linux安装mongodb教程

    /usr/local/mongodb/mongodb-linux-2.0.7/bin/mongod --dbpath=/usr/local/mongodb/data/db --logpath=/usr/local/mongodb/mongodb-linux-2.0.7/logs/mongodb.log --logappend --port=27017 --fork 知识点 6:配置...

    spring-data使用mongodbTemplate对MongoDB进行读写操作

    Spring Data MongoDB是一个强大的Java库,它为开发人员提供了一种简单的方式来访问和操作MongoDB数据库。这个库是Spring Data框架的一部分,旨在简化数据访问层的实现,尤其在使用NoSQL数据库如MongoDB时。MongoDB...

    MongoDB实验 - .docx

    MongoDB 实验报告 本实验报告旨在详细介绍 MongoDB 的安装、配置和基本操作步骤,本报告基于 CentOS 7 系统,通过一步一步的截图和文字说明,帮助读者快速掌握 MongoDB 的使用。 一、安装 MongoDB 首先,我们需要...

    mongodb c#驱动最新驱动mongodb.driver.dll 版本2.12.0-beta1

    MongoDB 是一个流行的开源、基于分布式文件存储的数据库系统,主要设计用于处理大量数据的分布式环境。C# 驱动是 MongoDB 提供的一种客户端库,允许 .NET 开发者与 MongoDB 数据库进行交互。标题提到的是 MongoDB 的...

    MongoDB之conf配置文件详解

    MongoDB之conf配置文件详解 MongoDB的配置文件是服务器的核心组件之一,它控制着MongoDB服务器的各种设置和行为。在本文中,我们将详细介绍MongoDB的配置文件的各个部分,并解释每个设置的作用和意义。 一、数据库...

    mongodb.dll 下载.zip

    MongoDB是一个开源、分布式、高性能的NoSQL数据库,以其灵活性、可扩展性和高可用性而闻名。`mongodb.dll`是MongoDB数据库系统在Windows平台上运行所必需的一个动态链接库(DLL)文件,它包含了MongoDB客户端和...

    geoserver发布mongodb矢量数据地图服务.docx

    Geoserver发布MongoDB矢量数据地图服务 Geoserver是一款功能强大且开源的地理信息系统(GIS)服务器,能够实现空间数据的存储、处理和发布。MongoDB是一款NoSQL数据库,能够存储大量的矢量数据。本文将介绍如何使用...

    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是...

    MongoDB4.2.21 Linux版本安装包

    MongoDB是一款高性能、无模式的分布式文档型数据库,被广泛应用于大数据分析、内容管理系统、物联网(IoT)、实时应用程序和地理位置数据存储等场景。在Linux环境下安装MongoDB 4.2.21版本,是许多系统管理员和开发者...

    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数据库jar包

    MongoDB是一个流行的开源、分布式文档型数据库,设计用于处理大量数据并提供高可用性和高性能。在Java应用程序中,为了与MongoDB进行交互,我们需要使用Java MongoDB驱动程序。这个压缩包包含的就是Java连接MongoDB...

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

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

    MongoDB c#驱动 dll

    MongoDB是一种流行的开源、分布式文档型数据库,以其灵活性、高性能和可伸缩性而闻名。在C#开发环境中,MongoDB提供了专门的C#驱动程序,使得开发者能够方便地与MongoDB进行交互。本篇文章将深入探讨MongoDB的C#驱动...

    Mongodb for Ubuntu 18.04 ARM 64

    MongoDB 是一个流行的开源文档型数据库,被广泛用于存储、管理和检索非结构化或半结构化数据。在本文中,我们将深入探讨如何在基于ARM架构的Ubuntu 18.04系统上安装和使用MongoDB。 一、ARM架构与Ubuntu 18.04 ARM...

    MongoDB Days 2015 深圳 PPT 共享

    MongoDB是一种分布式文档数据库,以其灵活性、高性能和可伸缩性而闻名,尤其适用于处理大量半结构化和非结构化数据。MongoDB Day 2015 深圳活动显然是一个专门针对MongoDB技术的研讨会或会议,旨在深入探讨和分享...

    mongodb Windows7 64位

    MongoDB是一款开源、高性能、无模式的文档型数据库,它在现代应用程序开发中扮演着重要的角色,特别是在处理大量非结构化数据时。针对"mongodb Windows7 64位"这个主题,我们将深入探讨MongoDB在Windows 7 64位操作...

Global site tag (gtag.js) - Google Analytics