作者:empty 出版社:empty |
1.概述
1.1.目的
让团队成员比较快的上手mongodb的相关功能,思考如何结合自己的项目使用。
1.2.范围
所有工程师。
2.准备
mongodb 下载地址:http://www.mongodb.org/downloads
mongodb 官方文档下载地址:
http://downloads.mongodb.org/docs/mongodb-docs-2012-09-19.pdf
十天精通mongodb 下载地址(强烈建议看下,其中包含对mongodb的详细介绍):
http://www.kuaipan.cn/file/id_45545890496119199.htm
如果你对mongodb希望有更多的了解(其中为mongodb资料专题):
http://blog.nosqlfan.com/html/3548.html
mongodb管理工具下载地址:
http://www.kuaipan.cn/file/id_45545890496119201.htm
2.1.环境配置
在这里提供针对windows7 系统的配置方案
2.2.Windows7安装mongodb
mongodb及其管理工具下载地址参见准备章节!
mongodb启动命令参数详见:
http://my.oschina.net/jacky0525/blog/33048
2.2.1.配置环境变量
1、在系统环境变量中添加MONGODB_HOME如图所示:
2、在PATH中添加%MONGODB_HOME% bin 如图所示:
在mongodb 目录中 新建 data 和 log 文件夹(为启动时做准备)
2.2.2.启动配置mongodb
进入DOS命令窗口 输入一下命令:
mongod --dbpath D: mongodb data --logpath D: mongodb log --logappend --directoryperdb
--dbpath数据库安装目录
--logpath 数据库输出目录
--logappend 日志追加,默认为覆盖
--directoryperdb 表示每个db一个目录
执行命令之后 开启新的 DOS窗口 执行 mongo 输出
表示启动成功。
目前是以无权限限制的方式启动的,你可以做任何操作。现在我们需要切换到admin下,创建一个root用户。执行命令:
show dbs 显示所有db
use admin 使用admin db
db 显示当前使用的db
db.addUser(”root”,”root”); 添加用户,用户名为root 密码为 root
db.auth(”root”,”root”); 为用户授权
这样我们就为admin db创建好用户,接下来以权限限制方式启动mongodb(记得关掉之前开启的服务),执行命令(在之前启动命令中添加参数-auth即可):
mongod --dbpath D: mongodb data --logpath D: mongodb log --logappend --auth –directoryperdb
-auth 安全模式下运行
接下来使用之前授权的用户名密码登录,打开新的DOS命令窗口输入如下命令:
mongo 数据库名称 –u 用户名 –p 密码
mongo admin –u root –p root
注意:为了启动方便可以把mongodb加入windows系统service
以管理员身份打开DOS命令窗口键入如下命令:
mongod --dbpath D: mongodb data --logpath D: mongodb log --logappend --auth --directoryperdb –install
这时候会在系统服务中增加 mongo db 项
第一次配置完成后,一定要重启才会有效果 重启mongo客户端,不输入-u-p可以直接进入,但是不具有任何权限。
3.Spring-data-mongodb
3.1.背景
SQL or NoSQL?That’s a question! SQL 与 NoSQL 的争论从来没有停息过,但其实任何一种技术都不会是适合一切应用场景的,重要的是你要充分了解自己的需求,再充分了解你要选择的技术的优劣。
优势:
快速!(当然,这和具体的应用方式有关,通常来说,它比一般的关系型数据库快5位左右。)
很高的可扩展性 – 轻轻松松就可实现PB级的存储(但是可能我们并不需要PB级的存储,10TB可能就够了)
他有一个很好的 replication 模式 (replica sets)
有很完善的Java API
他的存储格式是Json的,这对Java来说非常好处理,对javascirpt亦然。
运维起来非常方便,你不用专门为它安排一个管理员。
它有一个非常活跃的社区。
他的版本控制非常清楚。
MongoDB 背后的公司(10gen)已经准备好了明天在 MongoDB 上面的投入的资金。
劣势:
应用经验缺乏,我们都没有相关NoSQL 产品的使用经验。
项目相对来说还比较新。
和以往的存储相比,数据的关系性操作不再存在。
常用Jar:
spring-data-mongodb
mongo-java-driver
spring-core
相关JAR在MAVEN包管理中搜索选择对应版本即可
3.1.1.高级API
3.1.2.低级API
3.2.MongoDbFactory
就像所有的数据库连接,mongoDbFactory就是连接工厂,通过配置单台服务器或者连接池(pool)的方式获取Mongodb服务器的连接。
3.3.MongoTemplate
就像Spring提供的JDBC,hibernate和ibatis的template一样,spring-data-mongodb也提供了一个基础的泛型MongoTemplate供开发者可以快速的利用代码完成基础的crud工作。在实践中可以考虑完全省去dao层的设计,直接在service层注入相应的template实例。 在此推荐写一个Repository T>接口 其中提供对mongodb的CRUD操作。
3.4.Operations
其实所有的操作都是直接映射Mongodb本身提供的命令行,Spring-data-mongodb文档来操作。官网提供的API Javadoc有问题报404,只能看HTML版的参考手册:http://static.springsource.org/spring-data/data-mongodb/docs/current/reference/html/
404问题修复了(官方API):
http://static.springsource.org/spring-data/data-mongodb/docs/current/apidocs/
3.4.1.常用Api的方法:
新增方法:
User user = new User( ... );
//将user对象保存到 user 这个collection中
mongoTemplate.save(user);
//将user对象保存到 new collection 这个collection中
mongoTemplate.save( new collection ,user);
//将user对象保存到 user 这个collection中
mongoTemplate.insert(user);
//将user对象保存到 new collection 这个collection中
mongoTemplate.insert( new collection , user);
//将user的对象列表(List)保存到 user collection中去
mongoTemplate.insertList(userInList);
//将user的对象列表(List)保存到 new collection collection中去
mongoTemplate.insertList( new collection , userInList);
另外请注意其中的save和insert的区别。它们的区别为:
1)save意思是,当记录不存在时插入,或者是当记录已存在是更新,实际上就是save or update的意思。
2) insert的意思是:当记录不存在时插入,而如果记录存在时则忽略,继续插入。
查询方法:
//创建查询条件 id = 123 和 name = zhangyu
Query query = new Query(Criteria.where( id ).is(123).and( name ).is( zhangyu ));
//执行查询返回结果
List User> user = mongoTemplate.find(query, User.class);
//创建查询条件 id = 123 和 name = zhangyu
Query query = new Query(Criteria.where( id ).lte(123).and( name ).is( zhangyu ));
删除方法:
User user = new User( ... );
//删除user集合中的user对象
mongoOperation.remove(user);
//删除test集合下的id=2的user对象
mongoOperation.remove( test , new Query(Criteria.where( id ).is( 2 )));
//删除test集合下的,id=3的user对象,最后并且返回这个被删除的对象
User deletedUser = mongoOperation.findAndRemove( test ,
new Query(Criteria.where( id ).is( 3 )), User.class);
3.5.项目中如何配置实用mongodb
配置文件如图所示:
之后通过注解注入mongoTemplate 即可
3.6.基于实体Bean操作
1、使用@Document注解指明一个领域对象将被持久化到MongoDB中。@Id注解identifies。
@Document注解,表示这个POJO最终要持久化为MongoDB中的document,@id指出了需要持久化的@id
2、创建一个简单的接口。创建一个简单的接口,这个接口带有CRUD方法。这里还带有createCollection方法和dropCollection方法。
3、创建一个指定的领域对象CRUD的实现。
3.7.基于Document的操作
1、需要MongoDB-Java-Driver