mongodb ----> 从入门到。。。
环境:
centos6.8,jdk1.8.0_u172,mongodb-4.0.0,spring boot-1.5.15
1、环境搭建
tar -zxvf mongodb-linux-x86_64-rhel62-4.0.0.tgz -C /home/rui/ #解压,指定放置位置 mv mongodb-linux-x86_64-rhel62-4.0.0 mongodb-4.0.0 #重命名 cd mongodb-4.0.0 vim mongodb.conf #配置数据库db和日志log dbpath=/home/rui/mongodb-4.0.0/data/db logpath=/home/rui/mongodb-4.0.0/data/log mkdir -p data/db #创建目录 mkdir -p data/log13 14 vim /etc/profile #添加环境变量15 export PATH=$PATH:/home/rui/mongodb-4.0.0/bin16 source /etc/profile17
验证mongodb安装是否正确:
mongo -version
启动mongodb:
mongod --config /home/rui/mongodb-4.0.0/mongodb.config
启动mongodb shell:
mongo
2、概念
基础概念:文档、集合、数据库
英文对应:document, collection, database
其他概念:字段、索引、主键
英文对应:field, index, primary key
BSON(Binary JSON):类似json的二进制形式的存储格式
3、常用命令
1、显示所有数据库 show dbs 2、显示当前数据库 db 3、指定使用某数据库,当数据库xxx不存在时,该指令会创建数据库xxx use xxx910 4、删除数据库11 use xxx12 db.dropDatabase()13 ===========================================================================14 5、创建集合15 use xxx16 db.createCollection("collectionName")或者 db.createCollection("collectionName", options)16 #options指定参数:capped,autoIndex,size,max1718 6、显示集合19 show collections2021 7、删除集合22 db.collectionName.drop()23 =============================================================================24 8、插入文档 24 (集合中存储的数据都是 28 9、查询文档29 db.collectionName.find(<query>,<projection>)29 #返回满足条件的所有文档,query指定查询条件 projection指定返回的字段30 db.collectionName.find()#返回所有文档31 db.collectionName.findOne()#返回一条文档3233 10、更新文档34 db.collectionName.update(<query>,<update>,{upsert:<boolean>,muti:<boolean>})34 #query指定查询条件 update需要更新的对象3536 11、删除文档37 db.collectionName.remove(<query>,{justOne:<boolean>})3839 12、显示指定数量的文档40 db.collectionName.find().limit(number)4142 13、跳过指定数量的文档43 db.collectionName.find().limit(number1).skip(number2)44 db.collectionName.find().skip(number1).limit(number2)#可以实现分页
4、java操作mongodb
maven依赖:
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.8.1</version> </dependency>
连接mongodb,crud等测试,完整代码:
package com.rui; import org.junit.Test; import org.junit.Before; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; //common import com.mongodb.client.MongoDatabase; import com.mongodb.client.MongoCollection; import org.bson.Document; import java.util.Arrays; import com.mongodb.Block; import com.mongodb.client.MongoCursor; import static com.mongodb.client.model.Filters.*; import com.mongodb.client.result.DeleteResult; import static com.mongodb.client.model.Updates.*; import com.mongodb.client.result.UpdateResult; import java.util.ArrayList; import java.util.List; //new import com.mongodb.ConnectionString; import com.mongodb.client.MongoClients; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoIterable; import com.mongodb.MongoClientSettings; import com.mongodb.ServerAddress; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations={"classpath*:spring-mongodb.xml"}) public class NewMongodbConnTest{ private MongoDatabase database = null; @Before //@Test public void ConnTest(){ //default port = 27017 hostname = localhost //MongoClient mongoClient = MongoClients.create(); //or self define port and hostname MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("192.168.0.102", 27017)))) .build()); // access a Database database = mongoClient.getDatabase("rui"); // print all collection name in database MongoIterable<String> iterable = database.listCollectionNames(); MongoCursor<String> cursor = iterable.iterator(); try{ while(cursor.hasNext()){ System.out.println(cursor.next()); } }finally{ cursor.close(); } } @Test public void crudTest(){ // access a Collection MongoCollection<Document> collection = database.getCollection("rui"); // create a Document Document doc = new Document("name", "MongoDB") .append("type", "database") .append("count", 1) .append("versions", Arrays.asList("v3.2", "v3.0", "v2.6")) .append("info", new Document("x", 203).append("y", 102)); // insert one Document collection.insertOne(doc); // insert many Document List<Document> documents = new ArrayList<Document>(); for (int i = 0; i < 100; i++) { documents.add(new Document("i", i)); } collection.insertMany(documents); // count Document in collection System.out.println("document counts: " + collection.countDocuments()); // query first Document Document myDoc = collection.find().first(); System.out.println(myDoc.toJson()); //find all Document MongoCursor<Document> cursor = collection.find().iterator(); try { while (cursor.hasNext()) { System.out.println(cursor.next().toJson()); } } finally { cursor.close(); } //query one by a filter,pay attention to Filters helper Document myDoc = collection.find(eq("i", 71)).first(); System.out.println(myDoc.toJson()); // query all by a filter,pay attention to Filters helper Block<Document> printBlock = new Block<Document>() { @Override public void apply(final Document document) { System.out.println(document.toJson()); } }; collection.find(gt("i", 50)).forEach(printBlock); //update one Document collection.updateOne(eq("i", 10), new Document("$set", new Document("i", 110))); //update muti UpdateResult updateResult = collection.updateMany(lt("i", 100), inc("i", 100)); System.out.println(updateResult.getModifiedCount()); // delete one Document // collection.deleteOne(eq("i", 110)); // delete muti DeleteResult deleteResult = collection.deleteMany(gte("i", 100)); System.out.println(deleteResult.getDeletedCount()); // create index collection.createIndex(new Document("i", 1)); } }
windows连接linux中的mongodb,启动MongoDB方式如下:
各个代码块测试结果截图:
1、连接测试:
2、插入一条文档:
3、插入多条文档:
4、计算总文档条数:
5、查询第一条文档:
6、查询所有文档:
7、通过filter查询某条文档:
8、通过filter查询多条文档:
9、更新一条文档:
10、更新多条文档:
11、删除一条文档:
12、删除多条文档:
PojoMongodbTest.java
package com.rui; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.bson.Document; import com.mongodb.Block; //import com.mongodb.MongoClient; import com.mongodb.MongoClientURI; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import com.mongodb.client.result.DeleteResult; import com.mongodb.client.result.UpdateResult; import org.bson.codecs.configuration.CodecRegistry; import org.bson.codecs.pojo.PojoCodecProvider; import com.mongodb.client.MongoClients; //import com.mongodb.client.MongoClient; import java.util.List; import static com.mongodb.client.model.Filters.*; import static com.mongodb.client.model.Updates.*; import java.util.Arrays; import static org.bson.codecs.configuration.CodecRegistries.fromProviders; import static org.bson.codecs.configuration.CodecRegistries.fromRegistries; import com.mongodb.MongoClientSettings; import com.mongodb.ServerAddress; //@RunWith(SpringJUnit4ClassRunner.class) //@ContextConfiguration(locations={"classpath*:spring-mongodb.xml"}) public class PojoMongodbTest{ @Test public void pojoTest(){ CodecRegistry pojoCodecRegistry = fromRegistries(com.mongodb.MongoClient.getDefaultCodecRegistry(), fromProviders(PojoCodecProvider.builder().automatic(true).build())); /*MongoClientSettings settings = MongoClientSettings.builder() .codecRegistry(pojoCodecRegistry) .build(); MongoClient mongoClient = MongoClients.create(settings); */ com.mongodb.client.MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .codecRegistry(pojoCodecRegistry) // codec .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("192.168.0.102", 27017)))) .build()); MongoDatabase database = mongoClient.getDatabase("rui"); MongoCollection<Person> collection = database.getCollection("people", Person.class); //Insert a Person Person ada = new Person("Ada Byron", 20, new Address("St James Square", "London", "W1")); collection.insertOne(ada); //Insert multi Persons List<Person> people = java.util.Arrays.asList( new Person("Charles Babbage", 45, new Address("5 Devonshire Street", "London", "W11")), new Person("Alan Turing", 28, new Address("Bletchley Hall", "Bletchley Park", "MK12")), new Person("Timothy Berners-Lee", 61, new Address("Colehill", "Wimborne", null)) ); collection.insertMany(people); //query the collection Block<Person> printBlock = new Block<Person>() { @Override public void apply(final Person person) { System.out.println(person); } }; collection.find().forEach(printBlock); //query one by specifying query Filter Person somebody = collection.find(eq("address.city", "Wimborne")).first(); System.out.println(somebody.toString()); //query all by specifying query Filter collection.find(gt("age", 30)).forEach(printBlock); //update one collection.updateOne(eq("name", "Ada Byron"), combine(set("age", 23), set("name", "Ada Lovelace"))); //update multi ??? 原来文档少了“address.”!!! UpdateResult updateResult = collection.updateMany(not(eq("address.zip", null)), set("address.zip", null)); System.out.println(updateResult.getModifiedCount()); //replace Person ada = new Person("Ada Byron", 20, new Address("St James Square", "London", "W1")); collection.replaceOne(eq("name", "Ada Lovelace"), ada); //delete one // collection.deleteOne(eq("address.city", "Wimborne")); //delete multi DeleteResult deleteResult = collection.deleteMany(eq("address.city", "London")); System.out.println(deleteResult.getDeletedCount()); } }
Person.java
package com.rui; import lombok.Setter; import lombok.Getter; import lombok.ToString; import lombok.NoArgsConstructor; import org.bson.types.ObjectId; @Setter @Getter @NoArgsConstructor @ToString public final class Person{ private ObjectId id; private String name; private int age; private Address address; //public Person(){} public Person(String name, int age, Address address){ this.name = name; this.age = age; this.address = address; } }
Address.java
package com.rui; import lombok.Setter; import lombok.Getter; import lombok.ToString; import lombok.AllArgsConstructor; import lombok.NoArgsConstructor; @Setter @Getter @AllArgsConstructor @NoArgsConstructor @ToString public final class Address{ private String street; private String city; private String zip; }
1、插入一个person
2、插入多个person
3、查询全部person
4、查询满足个条件(Filter)的一个person
5、查询满足某个条件(Filter)的多个persons
6、更新满足个条件(Filter)的一个person
7、更新满足个条件(Filter)的多个person,可以通过UpdateResult类返回更新信息(官方文档的update示例有错误,少了“address.”)
8、替代满足个条件(Filter)的person
9、删除满足个条件(Filter)的一个person
10、删除满足个条件(Filter)的多个person,可以通过DeleteResult类返回删除信息
5、spring整合mongodb
1)maven依赖
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.1.0</version> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>1.8.0.RELEASE</version> </dependency>
2)spring-mongodb.xml配置
<context:property-placeholder location="classpath:/com/myapp/mongodb/config/mongo.properties"/> <mongo:mongo-client host="${mongo.host}" port="${mongo.port}"> <mongo:client-options connections-per-host="${mongo.connectionsPerHost}" threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}" connect-timeout="${mongo.connectTimeout}" max-wait-time="${mongo.maxWaitTime}" auto-connect-retry="${mongo.autoConnectRetry}" socket-keep-alive="${mongo.socketKeepAlive}" socket-timeout="${mongo.socketTimeout}" slave-ok="${mongo.slaveOk}" write-number="1" write-timeout="0" write-fsync="true"/> </mongo:mongo-client> <mongo:db-factory dbname="database" mongo-ref="mongoClient"/> <bean id="anotherMongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/> </bean>
6、spring boot整合mongodb
1)maven依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency>
2)application.properties配置
spring.application.name=spirng-boot-mongodb spring.data.mongodb.uri=mongodb://127.0.0.1:27017/rui
3)关注spring-data-mongodb的一个重要的类,提供了很多个实用的crud方法
org.springframework.data.mongodb.core.MongoTemplate;
template是高度抽象的类,用来存储和查询文档。
7、集群。。。
8、源码。。。
参考资料:
https://mongodb.github.io/mongo-java-driver/3.8/driver/getting-started/quick-start/
https://mongodb.github.io/mongo-java-driver/3.8/driver/getting-started/quick-start-pojo/
https://docs.spring.io/spring-data/mongodb/docs/2.0.9.RELEASE/reference/html/
mongodb ----> 从入门到。。。的更多相关文章
- 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)
今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...
- mongodb新手入门,mongodb命令学习
下面来总结一下mongodb新手入门的常用命令吧.要是您是mongodb新手,可以看下. 1,show dbs 查询mongodb里面的数据库列表 如果想查看当前连接在哪个数据库下面,可以直接输入db ...
- Node.js和MongoDB - MongoJS入门
第一次尝试翻译外国牛人的博文,希望大家喜欢. 本文源码详见:https://github.com/njaulj/mongojs 一点都不夸大的说,近年来node.js和mongodb的确是大放异彩,在 ...
- 大数据应用之:MongoDB从入门到精通你不得不知的21个为什么?
一.引言: 互联网的发展和电子商务平台的崛起,催生了大数据时代的来临,作为大数据典型开发框架的MongoDB成为了No-sql数据库的典型代表.MongoDB从入门到精通你不得不知的21个为什么专为大 ...
- MongoDb 快速入门教程
文章首发于[博客园-陈树义],点击跳转到原文MongoDb 快速入门教程. MongoDb 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 它是可扩展的 ...
- 在.Net Core中使用MongoDB的入门教程(二)
在上一篇文章中,讲到了MongoDB在导入驱动.MongoDB的连接,数据的插入等. 在.Net Core中使用MongoDB的入门教程(一) 本篇文章将接着上篇文章进行介绍MongoDB在.Net ...
- 在.Net Core中使用MongoDB的入门教程(一)
首先,我们在MongoDB的官方文档中看到,MongoDb的2.4以上的For .Net的驱动是支持.Net Core 2.0的. 所以,在我们安装好了MangoDB后,就可以开始MangoDB的.N ...
- Mongodb的入门(8)mongodb事物分析
老生常谈:<在前面博客中也介绍过> mongodb官网:https://docs.mongodb.com/manual/introduction/ mongodb:官网上是这样定义的Mon ...
- MongoDB基础入门视频教程
MongoDB基础入门视频教程http://www.icoolxue.com/album/show/98
- mongodb的入门CURD
mongodb的入门CURD #查看所有数据库show dbs;show databases; #有些版本可能不行 #使用数据库use 数据库名 #查看集合(集合即mysql的表)show table ...
随机推荐
- 关于break,return,和coutiune
public boolean searchStudent(String name,int start,int end) { if(students==null) { return false; } f ...
- 作业二 分布式版本控制系统Git的安装与使用
第一步:Git bash配置 修改用户名和邮箱地址: $ git config --global user.name "zzj" $ git config --global use ...
- Python的命令模式和交互模式
Python的命令行模式和交互模式 请注意区分命令行模式和Python交互模式. 在命令行模式下,可以执行python进入Python交互式环境,也可以执行python first.py运行一个.py ...
- 可视化&地图__公司收集
原文地址:https://github.com/zhongcaiwei/Data-visualization-technology-sharing 一.数据可视化企业(部分) 数字冰雹 光启元-腾讯 ...
- java JFR
1. 参数: -XX:+UnlockCommercialFeatures -XX:+FlightRecorder 2. 运行命令: jcmd <PID> JFR.start name=te ...
- java框架之SpringCloud(3)-Eureka服务注册与发现
在上一章节完成了一个简单的微服务案例,下面就通过在这个案例的基础上集成 Eureka 来学习 Eureka. 介绍 概述 Eureka 是 Netflix 的一个子模块,也是核心模块之一.Eureka ...
- 一个项目中mysql数据库经常死锁的问题解决记录
1.问题描述 此项目为一个物流系统,需要使用PDA对货物进行入库.备货.出货等操作,在系统开发测试过程中,经常发现死锁问题. 有这样一种业务场景:仓库对备货单上货进行扫码备货后,点击"完成& ...
- 【UML】NO.46.EBook.5.UML.1.006-【UML 大战需求分析】- 用例图(Use Case Diagram)
1.0.0 Summary Tittle:[UML]NO.46.EBook.1.UML.1.006-[UML 大战需求分析]- 用例图(Use Case Diagram) Style:DesignPa ...
- 墨刀联合有赞Vant组件库,让你轻松设计出电商原型
继上周新上线了简历模板之后,本周墨刀的原型模板库又欢喜地增添一名新成员! 有赞Vant组件库 (做电商的宝宝要捂嘴笑了) Vant 组件库是有赞前端团队开源的一套基于Vue的UI组件库,目前版本收 ...
- PHP----------file_get_content获取不到页面信息
1.将网址在页面上打开可以正常访问,但是用file_get_content请求则访问不到.这个是因为对方挡住了非浏览器访问导致的.需要改下php配置,模拟浏览器访问. user_agent=" ...