`
tmj_159
  • 浏览: 707319 次
  • 性别: Icon_minigender_1
  • 来自: 永州
社区版块
存档分类
最新评论

MongoDB 入门指南(JAVA Driver 版 官网教程)

 
阅读更多

本文总结来自MongoDB 的java版本的Driver(驱动) api入门指南

官网地址:https://docs.mongodb.org/getting-started/java/client/

 

MongoDB 一个开源的文档型数据库 ,提供高性能,高可用,自动切片的特性。

 

准备工作

首先我们需要下载一个MongoDB,我嫌麻烦就下载了一个社区版本,编译好的解压就能用。

 

curl -O https://fastdl.mongodb.org/osx/mongodb-osx-x86_64-3.2.4.tgz
 解压启动

 

 

 tar -zxvf mongodb-osx-x86_64-3.2.4.tgz 
直接启动./mongod 的话会出现下面的错误,错误中包含下面提示信息

 

 

 Data directory /data/db not found

这是因为MongoDB 默认会将数据文件放在/data/db下,我们可以指向其他存在的目录,比如说我们在安装目录下保存数据文件

mkdir -p /work/mongodb-osx-x86_64-3.2.4/dbpath

 所以接下来我们可以这样启动

 ./mongod --dbpath /work/mongodb-osx-x86_64-3.2.4/dbpath

 

 

代码很简单,直接上代码,重要的地方说明下即可

一、连接

 

public static void main(String[] args) {
		String dbName = "myDb";
		String collectionName = "myTable";
		try {
			testMongo(dbName, collectionName);
		} catch (ParseException e) {
			e.printStackTrace();
		}
	}

	public static void testMongo(String dbName, String collectionName) throws ParseException {
		MongoClient mc = new MongoClient("192.168.2.6", 27017);
		//获取数据库,不用担心之前没有,没有的话会创建一个
		MongoDatabase database = mc.getDatabase(dbName);

		testCollection(database, collectionName);
		mc.close();
	}

	public static void testCollection(MongoDatabase database, String collectionName) throws ParseException {
		//获取数据集合,可以理解为一个表,不用担心之前没有,没有的话会创建一个
		MongoCollection<Document> collection = database.getCollection(collectionName);

		insert(collection);
		find(collection);
		update(collection);
		remove(collection);

	}

 

 

二、插入数据

public static void insert(MongoCollection<Document> collection) throws ParseException {
		collection.drop();// 每次插入前把之前的数据全部删除

		DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.ENGLISH);
		collection.insertOne(new Document("address", new Document().append("street", "1 Avenue").append("zipcode", "10075").append("building", "1481")
				.append("coord", asList(-73.9557413, 40.7720266)))
				.append("borough", "Manhattan")
				.append("cuisine", "Italian")
				.append("grades",
						asList(new Document().append("date", format.parse("2014-10-01T00:00:00Z")).append("grade", "A").append("score", 12), new Document()
								.append("date", format.parse("2014-01-16T00:00:00Z")).append("grade", "B").append("score", 13))).append("name", "Vella")
				.append("restaurant_id", "41704621"));

		collection.insertOne(new Document("address", new Document().append("street", "2 Avenue").append("zipcode", "10076").append("building", "1482")
				.append("coord", asList(-73.9557413, 40.7720266)))
				.append("borough", "Manhattan")
				.append("cuisine", "Italian")
				.append("grades",
						asList(new Document().append("date", format.parse("2014-10-01T00:00:00Z")).append("grade", "A").append("score", 14), new Document()
								.append("date", format.parse("2014-01-16T00:00:00Z")).append("grade", "C").append("score", 15))).append("name", "Bruce")
				.append("restaurant_id", "41704622"));

		collection.insertOne(new Document("address", new Document().append("street", "3 Avenue").append("zipcode", "10077").append("building", "1483")
				.append("coord", asList(-73.9557413, 40.7720266)))
				.append("borough", "Manhattan")
				.append("cuisine", "Italian")
				.append("grades",
						asList(new Document().append("date", format.parse("2014-10-01T00:00:00Z")).append("grade", "B").append("score", 16), new Document()
								.append("date", format.parse("2014-01-16T00:00:00Z")).append("grade", "C").append("score", 17))).append("name", "Aline")
				.append("restaurant_id", "41704623"));
	}

 

 三、查找 

 

 

public static void find(MongoCollection<Document> collection) {
		/* 查询所有 */
		System.out.println("\n 查询所有");
		FindIterable<Document> find = collection.find();
		find.forEach(getShower());

		/* 顶层的查询 ,将整个数据看成一个格式化好的json来理解 */
		System.out.println("\n 顶层的查询 ,将整个数据看成一个格式化好的json来理解");
		FindIterable<Document> iterable = collection.find(new Document("borough", "Manhattan"));
		iterable.forEach(getShower());
		System.out.println("\n 利用mongo自带的filter来完成查询,和上一个查询等价");
		FindIterable<Document> find2 = collection.find(Filters.eq("borough", "Manhattan"));
		find2.forEach(getShower());

		/* 非顶层店查询 */
		System.out.println("\n 非顶层的查询 ,将整个数据看成一个格式化好的json来理解");
		FindIterable<Document> find3 = collection.find(new Document("address.zipcode", "10075"));
		find3.forEach(getShower());
		System.out.println("\n 利用mongo自带的filter来完成查询,和上一个查询等价");
		FindIterable<Document> find4 = collection.find(Filters.eq("address.zipcode", "10075"));
		find4.forEach(getShower());

		System.out.println("\n 非顶层的在某个数组中查询 ,将整个数据看成一个格式化好的json来理解");
		FindIterable<Document> find5 = collection.find(new Document("grades.grade", "B"));
		find5.forEach(getShower());
		System.out.println("\n 利用mongo自带的filter来完成查询,和上一个查询等价");
		FindIterable<Document> find6 = collection.find(Filters.eq("grades.grade", "B"));
		find6.forEach(getShower());

		/* 自定义查询 */
		System.out.println("\n 自定义的查询 利用$gt(great than)");
		FindIterable<Document> find7 = collection.find(new Document("grades.score", new Document("$gt", 30)));
		find7.forEach(getShower());
		System.out.println("\n 利用mongo自带的filter.gt 来完成查询,和上一个查询等价");
		FindIterable<Document> find8 = collection.find(Filters.gt("grades.score", 30));
		find8.forEach(getShower());
		System.out.println("\n 自定义的查询 利用$lt(less than)");
		FindIterable<Document> find9 = collection.find(new Document("grades.score", new Document("$lt", 15)));
		find9.forEach(getShower());
		System.out.println("\n 利用mongo自带的filter.lt 来完成查询,和上一个查询等价");
		FindIterable<Document> find10 = collection.find(Filters.lt("grades.score", 15));
		find10.forEach(getShower());

		/* 组合查询 */
		System.out.println("\n 组合查询 and");
		FindIterable<Document> find11 = collection.find(new Document("cuisine", "Italian").append("address.zipcode", "10075"));
		find11.forEach(getShower());
		System.out.println("\n 利用mongo自带的filter.and 来完成组合查询,和上一个查询等价");
		FindIterable<Document> find12 = collection.find(Filters.and(Filters.eq("cuisine", "Italian"), Filters.eq("address.zipcode", "10075")));
		find12.forEach(getShower());
		System.out.println("\n 组合查询 or");
		FindIterable<Document> find13 = collection.find(new Document("$or",
				asList(new Document("cuisine", "Italian"), new Document("address.zipcode", "10075"))));
		find13.forEach(getShower());
		System.out.println("\n 利用mongo自带的filter.or 来完成组合查询,和上一个查询等价");
		FindIterable<Document> find14 = collection.find(Filters.or(Filters.eq("cuisine", "Italian"), Filters.eq("address.zipcode", "10075")));
		find14.forEach(getShower());

		/* 查询后的排序 */
		System.out.println("\n 通过在查询的结果集后调用sort来完成排序");
		FindIterable<Document> find15 = collection.find().sort(new Document("borough", 1).append("address.zipcode", 1));
		find15.forEach(getShower());
		System.out.println("\n 利用mongo自带的filter.sort 来完成排序,和上一个查询等价");
		FindIterable<Document> find16 = collection.find().sort(Sorts.ascending("borough", "address.zipcode"));
		find16.forEach(getShower());
	}


   上面代码中的一些小的工具方法

public static void showall(MongoCollection<Document> collection) {
		System.out.println("\n 查询所有");
		FindIterable<Document> find = collection.find();
		find.forEach(getShower());
	}

	public static Block<Document> getShower() {
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		return new Block<Document>() {
			public void apply(final Document document) {
				System.out.println(document);
			}
		};
	}

  

 

 

四、更新

 

public static void update(MongoCollection<Document> collection) {
		/* 更新顶层节点 ,使用了内置函数 $set , $currentDate */
		System.out.println("\n更新顶层节点 ,使用了内置函数 $set , $currentDate 更新之前");
		showall(collection);
		collection.updateOne(new Document("name", "Aline"),
				new Document("$set", new Document("cuisine", "American (New)")).append("$currentDate", new Document("lastModified", true)));
		System.out.println("更新之后\n");
		showall(collection);

		/* 更新非顶层节点,使用了内置函数 $set */
		System.out.println("\n更新非顶层节点,使用了内置函数 $set 更新之前");
		showall(collection);
		collection.updateOne(new Document("restaurant_id", "41704622"), new Document("$set", new Document("address.street", "East 31st Street")));
		System.out.println("更新之后\n");
		showall(collection);

		/* 更新多个 ,使用的是append 函数 */
		System.out.println("\n更新多个 ,使用的是append ,$set ,$lastModified 函数 更新之前");
		showall(collection);
		collection.updateMany(new Document("address.zipcode", "10075").append("cuisine", "Italian"), new Document("$set", new Document("cuisine",
				"Category To Be Determined")).append("$currentDate", new Document("lastModified", true)));
		System.out.println("更新之后\n");
		showall(collection);

		/* 替换 */
		System.out.println("\n替换 ,可以理解为通过前面的条件查询到_id,对应的记录然后整个替换这条记录");
		showall(collection);
		collection.replaceOne(
				new Document("restaurant_id", "41704622"),
				new Document("address", new Document().append("street", "2 Avenue").append("zipcode", "10075").append("building", "1480")
						.append("coord", asList(-73.9557413, 40.7720266))).append("name", "Vella 2"));
		System.out.println("更新之后\n");
		showall(collection);
	}

 

五、删除

 

public static void remove(MongoCollection<Document> collection) {
		/* 删除 */
		System.out.println("\n删除符合条件的数据,删除之前的数据如下");
		showall(collection);
		collection.deleteMany(new Document("borough", "Manhattan"));
		System.out.println("删除之后的数据如下");
		showall(collection);
		System.out.println("\n删除所有数据,删除之前的数据如下");
		showall(collection);
		collection.deleteMany(new Document());
		System.out.println("删除之后的数据如下");
		showall(collection);

		System.out.println("\n删除整个集合,包括集合中的数据和索引");
		showall(collection);
		collection.drop();
		System.out.println("删除之后的数据如下");
		showall(collection);
	}

 

六、补上加索引

public static void index(MongoCollection<Document> collection) {
		System.out.println("\n创建单个索引");
		collection.createIndex(new Document("cuisine", 1));

		System.out.println("\n创建索引");
		collection.createIndex(new Document("cuisine", 1).append("address.zipcode", -1));
	}

 

分享到:
评论

相关推荐

    mongodb-java-driver-4.4.0.jar

    mongodb-java-driver-4.4.0.jar

    MongoDB Java Driver 简单操作

    为了方便开发者使用 Java 进行开发,MongoDB 提供了官方的 Java 驱动程序(MongoDB Java Driver),使得 Java 应用能够轻松地与 MongoDB 数据库进行交互。 #### 二、基本概念与连接 在开始使用 MongoDB Java Driver...

    mongodb-java-driver-3.5.0.jar最新驱动包

    亲测可用,解压包含三个jar包,引用时sources和doc包根据需要添加。 mongo-java-driver-3.5.0.jar; mongo-java-driver-3.5.0-javadoc.jar; mongo-java-driver-3.5.0-sources.jar;

    mongodb-java-driver源码依赖库

    MongoDB Java Driver是Java开发者用来与MongoDB数据库交互的官方驱动程序。这个源码依赖库包含了一组Java类和接口,使得开发人员能够方便地在应用程序中执行CRUD(创建、读取、更新、删除)操作以及其他高级功能,如...

    mongodb_java_driver

    mongodb_java_driver 已经验证可用!

    MongoDB入门指南.pdf

    MongoDB入门指南 MongoDB是一种开源的文档类型数据库,它具有高性能、可扩展、高可用、自动收缩等特性。MongoDB能够避免传统的ORM映射,从而有助于开发。MongoDB中的每一行记录就是一个文档,它是一个由键值对构成...

    MongoDBjava各版本驱动下载

    MongoDB Java驱动是Java开发者与MongoDB数据库交互的重要工具,它允许Java应用程序通过标准的Java API来执行查询、插入、更新和删除等操作。在Java中使用MongoDB,首先需要安装并配置对应的驱动版本,以确保与正在...

    mongodb driver for java 源码

    MongoDB Java驱动程序是Java开发者用来与MongoDB数据库进行交互的官方库。源码分析将帮助我们深入理解其内部工作原理,优化应用性能,并有可能自定义功能以满足特定需求。以下是对MongoDB Java驱动2.5.3版本源码的...

    mongodb-async-driver-2.0.1驱动.zip

    MongoDB Async Java Driver Documentation Welcome to the MongoDB Async Java driver documentation hub. Getting Started The Getting Started guide contains installation instructions and a simple ...

    MongoDB入门教程 + 架构简析 + java使用MongoDB的简单程序

    首先,我们从"MongoDB入门教程"开始。MongoDB采用的是键值对存储方式,数据以JSON格式(BSON)存储,这使得数据的读写更加自然和高效。MongoDB支持丰富的查询语法,包括字段选择、条件操作、排序和分组,为开发者...

    mongo-java-driver-3.4.3,java连接mongodb的jar包驱动包

    mongo-java-driver-3.4.3.jar 是 MongoDB 官方为 Java 开发者提供的 Java 驱动程序的一个特定版本(3.4.3)。这个 JAR 文件包含了与 MongoDB 数据库进行交互所需的类和接口,允许 Java 应用程序连接到 MongoDB 实例...

    mongoDB java driver api

    MongoDB Java驱动API是用于与MongoDB数据库交互的Java库,它是MongoDB官方提供的一个关键组件,使得Java开发者能够方便地在应用程序中存取数据。MongoDB是一个高性能、开源、无模式的文档型数据库,而Java驱动API则...

    mongodb-async-driver-2.0.1 jar包

    MongoDB异步驱动程序(mongodb-async-driver)是为Java开发者设计的一个库,它允许应用程序以非阻塞的方式与MongoDB服务器进行通信,提高了处理大量并发请求的能力。 在"mongodb-async-driver-2.0.1.jar"这个特定...

    mongodb-driver-sync-4.2.3-API文档-中英对照版.zip

    标签:mongodb、driver、sync、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,...

    mongodb-java-driver.jar

    使用java 操作mongoDB必须的jar包,

    MongoDB入门指南 by it-ebooks.epub

    MongoDB入门指南

    MongoDB_3.8.2驱动jar包及其同版本依赖包bson和mongodb-driver-core

    java和mongodb连接,需要mongodb-driver,您还必须下载其依赖项: bson和 mongodb-driver-core》》3个包: mongodb-driver-3.8.2.jar; bson-3.8.2.jar; mongodb-driver-core-3.8.2.jar

    MongoDB Driver -JAVA 2.5.3 API

    MongoDB Driver for Java 2.5.3是官方提供的用于Java开发者与MongoDB数据库交互的API。这个API允许程序员高效地执行各种操作,包括插入、查询、更新和删除MongoDB中的数据。MongoDB是一个高性能、无模式的文档型...

    mongodb java driver 2.11

    MongoDB Java Driver 2.11是用于与MongoDB数据库进行交互的Java开发库,它提供了丰富的API,使得Java开发者可以方便地在应用程序中存取和管理MongoDB的数据。MongoDB是一款高性能、分布式、文档型的NoSQL数据库,它...

    MongoDb java driver 3.4.2

    - `mongo-java-driver-3.4.2.jar`:这是核心的MongoDB Java驱动程序库,包含了所有必要的类和方法,用于在Java应用中连接、查询和操作MongoDB数据库。 - `mongo-java-driver-3.4.2-sources.jar`:这个文件包含驱动...

Global site tag (gtag.js) - Google Analytics