2019独角兽企业重金招聘Python工程师标准>>>

MongoDB安装

1. 官网下载安装介质:https://www.mongodb.com/download-center,选择适当的版本,这里以linux版本为例;
2. 解压到系统某路径, tar -xvzf mongodb-linux-x86_64-rhel70-3.4.10.tgz并在安装目录创建data目录,以及logs目录和logs/mongodb.log文件
3. 使用vim在mongodb的bin目录创建mongodb的配置文件,如:vimbin/mongodb.conf,mongodb.conf内容请见下一页课件;
4. 编写shell脚本,命名为start-mongodb.sh,脚本内容如下:nohup ./mongod -f mongodb.conf &
5. 使用start-mongodb.sh启动mongodb实例,如:./start-mongodb
6. 使用mongoClient进行测试  通过restAPI地址测试(端口加配置文件的端扣加1000)

 http://192.168.225.129:28022/listDatabases?text=1

连接客户端命令  在bin下执行

./mongo localhost:27022

配置文件

storage:dbPath: "/usr/local/apache/mongoDB/mongodb-linux-x86_64-rhel70-3.4.10/data"
systemLog:destination: filepath: "/usr/local/apache//mongoDB/mongodb-linux-x86_64-rhel70-3.4.10/logs/mongodb.log"
net:port: 27022http:RESTInterfaceEnabled: true
processManagement:fork: false

MongoDB配置文件详解

快速入门

数据结构介绍

 人员信息

{"_id" : ObjectId("59f938235d93fc4af8a37114"),"username" : “lison","country" : "in11digo","address" : {"aCode" : "邮编","add" : "d11pff"},"favorites" : {"movies" : ["杀破狼2","1dushe","雷神1"],"cites" : ["1sh","1cs","1zz"]},"age" : 18,"salary":NumberDecimal("2.099"),"lenght" :1.79
}

需求描述

 新增2人
 删除
     delete from users where username = ‘lison’
     delete from users where age >8 and age <25
 修改
     update users set age=6 where username = lison'
     update users set favorites.movies add "小电影2 ", "小电影3" where favorites.cites has "东莞"
 查询
     select * from users where favorites.cites has "东莞"、"东京"
     select * from users where username like '%s%' and (country= English or country= USA)

学习目标

 直观感受mongoDB的魅力
 mongo开发入门(原生、spring)
 开发框架版本选择
 mongoDB数据类型全解析
 对nosql的理念有初步的认识

mongoDB  客户端 & 图形化界面

 mongoDB自带的命令客户端 mongo
 mongoDB自带的图形化客户端:Compass Community
 第三方mongoDB的图形化客户端:robomongo

原生java客户端

 pom文件

<dependency><groupId>org.mongodb</groupId><artifactId>mongo-java-driver</artifactId><version>3.5.0</version>
</dependency>

Tips:
1. 3.5.0最新版本加入了对pojo的支持;
2. 3.5.0最新版本增强对json的支持;
3. mongodb原生客户端支持两种document和pojo模式的开发;

//原生java驱动 document的操作方式
public class QuickStartJavaDocTest {private static final Logger logger = LoggerFactory.getLogger(QuickStartJavaDocTest.class);private MongoDatabase db;private MongoCollection<Document> doc;private MongoClient client;@Beforepublic void init(){client = new MongoClient("192.168.225.129",27022);db =client.getDatabase("test");doc = db.getCollection("users");}@Testpublic void insertDemo(){Document doc1 = new Document();doc1.append("username", "cang");doc1.append("country", "USA");doc1.append("age", 20);doc1.append("lenght", 1.77f);doc1.append("salary", new BigDecimal("6565.22"));Map<String, String> address1 = new HashMap<String, String>();address1.put("aCode", "0000");address1.put("add", "xxx000");doc1.append("address", address1);Map<String, Object> favorites1 = new HashMap<String, Object>();favorites1.put("movies", Arrays.asList("aa","bb"));favorites1.put("cites", Arrays.asList("东莞","东京"));doc1.append("favorites", favorites1);Document doc2  = new Document();doc2.append("username", "chen");doc2.append("country", "China");doc2.append("age", 30);doc2.append("lenght", 1.77f);doc2.append("salary", new BigDecimal("8888.22"));Map<String, String> address2 = new HashMap<>();address2.put("aCode", "411000");address2.put("add", "我的地址2");doc1.append("address", address2);Map<String, Object> favorites2 = new HashMap<>();favorites2.put("movies", Arrays.asList("东游记","一路向东"));favorites2.put("cites", Arrays.asList("珠海","东京"));doc2.append("favorites", favorites2);doc.insertMany(Arrays.asList(doc1,doc2));}@Testpublic void testDelete(){//delete from users where username = ‘lison’DeleteResult deleteMany = doc.deleteMany(eq("username", "lison"));logger.info(String.valueOf(deleteMany.getDeletedCount()));//delete from users where age >8 and age <25DeleteResult deleteMany2 = doc.deleteMany(and(gt("age",8),lt("age",25)));logger.info(String.valueOf(deleteMany2.getDeletedCount()));}@Testpublic void testUpdate(){//update  users  set age=6 where username = 'lison'      $set 如果不带$ 表示覆盖整个数据   带$表示覆盖指定列UpdateResult updateMany = doc.updateMany(eq("username", "lison"),new Document("$set",new Document("age",6)));logger.info(String.valueOf(updateMany.getModifiedCount()));//update users  set favorites.movies add "小电影2 ", "小电影3" where favorites.cites  has "东莞"UpdateResult updateMany2 = doc.updateMany(eq("favorites.cites", "东莞"), addEachToSet("favorites.movies", Arrays.asList( "小电影2 ", "小电影3")));logger.info(String.valueOf(updateMany2.getModifiedCount()));}@Testpublic void testFind(){final List<Document> ret = new ArrayList<>();Block<Document> printBlock = new Block<Document>() {@Overridepublic void apply(Document t) {logger.info(t.toJson());ret.add(t);}};       //select * from users  where favorites.cites has "东莞"、"东京"FindIterable<Document> find = doc.find(all("favorites.cites", Arrays.asList("东莞","东京")));find.forEach(printBlock);logger.info(String.valueOf(ret.size()));ret.removeAll(ret);//select * from users  where username like '%s%' and (contry= English or contry = USA)String regexStr = ".*s.*";Bson regex = regex("username", regexStr);Bson or = or(eq("country","English"),eq("country","USA"));FindIterable<Document> find2 = doc.find(and(regex,or));find2.forEach(printBlock);logger.info(String.valueOf(ret.size()));}}
//原生java驱动 Pojo的操作方式
public class QuickStartJavaPojoTest {private static final Logger logger = LoggerFactory.getLogger(QuickStartJavaPojoTest.class);private MongoDatabase db;private MongoCollection<User> doc;private MongoClient client;@Beforepublic void init(){//编解ma器的listList<CodecRegistry> codecResgistes = new ArrayList<>();//编解ma器的list加入默认的编解ma器结合codecResgistes.add(MongoClient.getDefaultCodecRegistry());//生成一个pojo的编解ma器CodecRegistry pojoProviders = CodecRegistries.fromProviders(PojoCodecProvider.builder().automatic(true).build());codecResgistes.add(pojoProviders);//通过编解ma器的list生成编解ma器注册中心CodecRegistry registry = CodecRegistries.fromRegistries(codecResgistes);//把编解ma器注册中心放入MongoClientOptionsMongoClientOptions build = MongoClientOptions.builder().codecRegistry(registry).build();ServerAddress serverAddress = new ServerAddress("192.168.225.129",27022);client = new MongoClient(serverAddress, build);db =client.getDatabase("test");doc = db.getCollection("users",User.class);}@Testpublic void insertDemo(){User user = new User();user.setUsername("cang");user.setCountry("USA");user.setAge(20);user.setLenght(1.77f);user.setSalary(new BigDecimal("6265.22"));Address address1 = new Address();address1.setaCode("411222");address1.setAdd("sdfsdf");user.setAddress(address1);Favorites favorites1 = new Favorites();favorites1.setCites(Arrays.asList("东莞","东京"));favorites1.setMovies(Arrays.asList("西游记","一路向西"));user.setFavorites(favorites1);User user1 = new User();user1.setUsername("chen");user1.setCountry("China");user1.setAge(30);user1.setLenght(1.77f);user1.setSalary(new BigDecimal("6885.22"));Address address2 = new Address();address2.setaCode("411000");address2.setAdd("我的地址2");user1.setAddress(address2);Favorites favorites2 = new Favorites();favorites2.setCites(Arrays.asList("珠海","东京"));favorites2.setMovies(Arrays.asList("东游记","一路向东"));user1.setFavorites(favorites2);doc.insertMany(Arrays.asList(user,user1));}@Testpublic void testDelete(){//delete from users where username = ‘lison’DeleteResult deleteMany = doc.deleteMany(eq("username", "chen"));logger.info(String.valueOf(deleteMany.getDeletedCount()));//delete from users where age >8 and age <25DeleteResult deleteMany2 = doc.deleteMany(and(gt("age",8),lt("age",25)));logger.info(String.valueOf(deleteMany2.getDeletedCount()));}@Testpublic void testUpdate(){//update  users  set age=6 where username = 'lison' UpdateResult updateMany = doc.updateMany(eq("username", "cang"), new Document("$set",new Document("age",6)));logger.info(String.valueOf(updateMany.getModifiedCount()));//update users  set favorites.movies add "小电影2 ", "小电影3" where favorites.cites  has "东莞"UpdateResult updateMany2 = doc.updateMany(eq("favorites.cites", "东莞"), addEachToSet("favorites.movies", Arrays.asList( "小电影2 ", "小电影3")));logger.info(String.valueOf(updateMany2.getModifiedCount()));}@Testpublic void testFind(){final List<User> ret = new ArrayList<>();Block<User> printBlock = new Block<User>() {@Overridepublic void apply(User t) {System.out.println(t.getUsername());System.out.println(t.getSalary());ret.add(t);}};//select * from users  where favorites.cites has "东莞"、"东京"FindIterable<User> find = doc.find(all("favorites.cites", Arrays.asList("东莞","东京")));find.forEach(printBlock);logger.info(String.valueOf(ret.size()));ret.removeAll(ret);//select * from users  where username like '%s%' and (contry= English or contry = USA)String regexStr = ".*s.*";Bson regex = regex("username", regexStr);Bson or = or(eq("country","English"),eq("country","USA"));FindIterable<User> find2 = doc.find(and(regex,or));find2.forEach(printBlock);logger.info(String.valueOf(ret.size()));}}

Spring-data-mongodb客户端

pom文件

<dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-mongodb</artifactId><version>1.10.9.RELEASE</version>
</dependency>

Tips:
1. spring-data-mongodb的最新版本是2.x.x,如果是spring为5.0版本以上的才推荐使用;
2. spring-data-mongodb的1.10.9版本基于spring4.3.x开发,但是默认依赖的mongodb驱动为2.14.3,可以将mongodb的驱动设置为3.5.0的版本,兼容性待进一步测试;
3. spring-data-mongodb的1.10.9可能会支持3.5.0版本 mongodb驱动;
4. spring-data-mongodb一般使用pojo的方式开发;

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:mongo="http://www.springframework.org/schema/data/mongo"xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsdhttp://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd"><!-- <context:property-placeholder location="classpath:/com/myapp/mongodb/config/mongo.properties" /> --><!-- mongodb连接池配置 --><mongo:mongo-client host="192.168.225.129" port="27022"><mongo:client-options write-concern="ACKNOWLEDGED"connections-per-host="100"threads-allowed-to-block-for-connection-multiplier="5"max-wait-time="120000"connect-timeout="10000"/> </mongo:mongo-client><!-- mongodb数据库工厂配置 --><mongo:db-factory dbname="test" mongo-ref="mongo" /><!-- mongodb模板配置 --><bean id="anotherMongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"><constructor-arg name="mongoDbFactory" ref="mongoDbFactory" /><!-- <constructor-arg name="mongoConverter" ref="mappingConverter"/> --><property name="writeResultChecking" value="EXCEPTION"></property></bean></beans>
@Document(collection="users")
public class User {private ObjectId id;private String username;private String country;private Address address;private Favorites favorites;private int age;private BigDecimal salary;private float lenght;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getCountry() {return country;}public void setCountry(String country) {this.country = country;}public Address getAddress() {return address;}public void setAddress(Address address) {this.address = address;}public Favorites getFavorites() {return favorites;}public void setFavorites(Favorites favorites) {this.favorites = favorites;}public ObjectId getId() {return id;}public void setId(ObjectId id) {this.id = id;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public BigDecimal getSalary() {return salary;}public void setSalary(BigDecimal salary) {this.salary = salary;}public float getLenght() {return lenght;}public void setLenght(float lenght) {this.lenght = lenght;}}
//spring Pojo的操作方式
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class QuickStartSpringPojoTest {private static final Logger logger = LoggerFactory.getLogger(QuickStartSpringPojoTest.class);@Resourceprivate MongoOperations tempelate;@Testpublic void insertDemo(){User user = new User();user.setUsername("cang");user.setCountry("USA");user.setAge(20);user.setLenght(1.77f);user.setSalary(new BigDecimal("6265.22"));Address address1 = new Address();address1.setaCode("411222");address1.setAdd("sdfsdf");user.setAddress(address1);Favorites favorites1 = new Favorites();favorites1.setCites(Arrays.asList("东莞","东京"));favorites1.setMovies(Arrays.asList("西游记","一路向西"));user.setFavorites(favorites1);User user1 = new User();user1.setUsername("chen");user1.setCountry("China");user1.setAge(30);user1.setLenght(1.77f);user1.setSalary(new BigDecimal("6885.22"));Address address2 = new Address();address2.setaCode("411000");address2.setAdd("我的地址2");user1.setAddress(address2);Favorites favorites2 = new Favorites();favorites2.setCites(Arrays.asList("珠海","东京"));favorites2.setMovies(Arrays.asList("东游记","一路向东"));user1.setFavorites(favorites2);tempelate.insertAll(Arrays.asList(user,user1));}@Testpublic void testDelete(){//delete from users where username = ‘lison’WriteResult remove = tempelate.remove(query(where("username").is("cang ")), User.class);System.out.println(remove.getN());//delete from users where age >8 and age <25WriteResult remove2 = tempelate.remove(query(new Criteria().andOperator(where("age").gt(8),where("age").lt(25))), User.class);System.out.println(remove2.getN());}@Testpublic void testUpdate(){//update  users  set age=6 where username = 'lison' WriteResult updateFirst = tempelate.updateMulti(query(where("username").is("chen")), update("age", 6), User.class);System.out.println(updateFirst.getN());//update users  set favorites.movies add "小电影2 ", "小电影3" where favorites.cites  has "东莞"Query query = query(where("favorites.cites").is("东莞"));Update update = new Update().addToSet("favorites.movies").each("小电影2 ", "小电影3");WriteResult updateMulti = tempelate.updateMulti(query, update, User.class);System.out.println(updateMulti.getN());}@Testpublic void testFind(){//select * from users  where favorites.cites has "东莞"、"东京"List<User> find = tempelate.find(query(where("favorites.cites").all(Arrays.asList("东莞","东京"))), User.class);System.out.println(find.size());//select * from users  where username like '%s%' and (contry= EngLish or contry = USA)String regexStr = ".*s.*";//username like '%s%'Criteria regex = where("username").regex(regexStr);//contry= EngLishCriteria or1 = where("country").is("English");//contry= USACriteria or2 = where("country").is("USA");Criteria or = new Criteria().orOperator(or1,or2);Query query = query(new Criteria().andOperator(regex,or));List<User> find2 = tempelate.find(query, User.class);System.out.println(find2.size());}}

开发框架版本选择

 java 驱动与mongoDB兼容性

开发框架版本选择

 java 驱动与jdk的兼容性

开发框架版本选择

 spring data mongo 与java mongo驱动兼容性

mongoDB数据类型

转载于:https://my.oschina.net/u/3728166/blog/2050215

MongoDB开发基础相关推荐

  1. React + Redux + Express + Mongodb 零基础开发完整大型商城网站视频教程(97 个视频)

    React + Redux + Express + Mongodb 零基础开发完整大型商城网站视频教程(97 个视频) mern 架构零基础开发完整电商网站 React + Redux + Expre ...

  2. 6.3 Spring Boot集成mongodb开发

    6.3 Spring Boot集成mongodb开发 本章我们通过SpringBoot集成mongodb,Java,Kotlin开发一个极简社区文章博客系统. 0 mongodb简介 Mongo 的主 ...

  3. drf使用mongodb开发vsp平台设计

    drf使用mongodb开发vsp平台设计(python) 安装mongodb(并且安装MongoDB 的图形界面MongoDB Compass).pycharm.postman(做测试) 一.创建项 ...

  4. 音视频开发基础知识到进阶剖析

    全网最强音视频开发教学--音视频开发基础知识到进阶剖析 1.要掌握多深的原理才能开始做项目 2.音视频基础有哪些必须掌握的 3.进阶需要学习什么项目 视频讲解如下,点击观看: 全网最强音视频开发--音 ...

  5. 结合MongoDB开发LBS应用(转)

    原文链接:结合MongoDB开发LBS应用 简介 随着近几年各类移动终端的迅速普及,基于地理位置的服务(LBS)和相关应用也越来越多,而支撑这些应用的最基础技术之一,就是基于地理位置信息的处理.我所在 ...

  6. MongoDB开发使用手册

    一.基础部分 MongDB简介 NOSQL历史和产生原因 原因: 互联网用户数的增长和用户参与互联网习惯的改变 初始的静态内容网站,提供中心化的内容服务, 特点: 中心化,用户阅读内容 系统:Apac ...

  7. MongoDB开发LBS应用

    随着近几年各类移动终端的迅速普及,基于地理位置的服务(LBS)和相关应用也越来越多,而支撑这些应用的最基础技术之一,就是基于地理位置信息的处理. 关于LBS的详细介绍及通用的几个解决方案,可以参考:深 ...

  8. 虚幻引擎虚拟现实开发基础学习教程

    流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:3.93 GB |时长:5h 15m 了 ...

  9. 虚幻引擎C++编程游戏开发基础

    流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:23.8 GB |时长:44h 59m ...

最新文章

  1. 不属于计算机常用软件日常应用的是,综合技能实践+计算机常用应用软件的安装和使用指导 (1)...
  2. 提高效率的几个软件和快捷键
  3. 冯山C语言3 15,冯山
  4. java环境变量自动设置_自动设置Java环境变量
  5. 途观l怎么使用_官宣!中型SUV质量最新排名出炉:汉兰达失前三,大众途观L上榜!...
  6. poj 1068 Parencodings
  7. Python菜鸟入门:day12编程学习
  8. Groovy 入门教程
  9. 小龙秋招【面试笔记】正式发布,速来围观!(已有40+同学斩获大厂offer)
  10. 如何管理时间:重要紧急四象限的思考
  11. 计算机设备管理cmd命令,打开设备管理器的命令,教你一分钟学会最简单
  12. IDS(Informix Dynamic Server)的培训文档[转贴]
  13. 做人,该善良时就善良,该勇敢时就要有勇气去对应
  14. centos 7安装部署 单节点 Elasticsearch 6.6.0
  15. 大学一定要拿计算机证书吗,大学期间,一定要拿到这些证书,不要到了毕业才后悔...
  16. 电脑屏幕亮度怎么调?四种自由调节亮度方式
  17. 安卓虚拟键盘_像科幻片里那样隔空打字,虚拟键盘会成为未来趋势吗?
  18. 第一篇博客——(自我介绍篇)
  19. Scrapy抓取豆瓣电影
  20. Frontpage的下一代,Microsoft Expression Web

热门文章

  1. arcgis新建图层信息复制_怎么在arcgis中把一个图层复制到另一个图层上
  2. oracle中把一个表中的数据更新到新表中
  3. iphone快捷指令登录i-NUIST 南信大校园网自动登录
  4. 用Python画国旗
  5. android6支持内存卡,诺基亚6可以插内存卡吗 Nokia 6支持内存卡扩展吗
  6. spingioc浅见
  7. 2021年美国大学生数学建模竞赛A题思路分析
  8. saltstack 的安装
  9. linux查看内存条ddr3和ddr4,怎么区分DDR3和DDR4内存条
  10. MDU某产品OMCI模块代码质量现状分析