本文将介绍MongoDB的使用,主要有:
- MongoDB的简介以及导入样例数据;
- Java Driver的概览;
- 基本的CRUD操作和数据聚合( Aggregation);
- 创建索引以提高查询性能。
1.MongoDB的简介以及导入样例数据
MongoDB是一个提供高性能的文档数据库(document database),它通过消除对对象关系模型(ORM)的刚性需求从而促进开发。
Documents:document是指MongoDB中的记录,由field和value对组成。MongoDB中的document与JSON对象相类似。fields对应的values可以包含其他的document,数组document数组。
Collections:在MongoDB中,document是存储在Collections(集合)中的,Collections类似于关系型数据库中的table,但又不是table,因为Collection并不需要它的document拥有同样的模式(schema),如下表示一个restaurants collection:
{
"address": {
"building": "1007",
"coord": [ -73.856077, 40.848447 ],
"street": "Morris Park Ave",
"zipcode": "10462"
},
"borough": "Bronx",
"cuisine": "Bakery",
"grades": [
{ "date": { "$date": 1393804800000 }, "grade": "A", "score": 2 },
{ "date": { "$date": 1378857600000 }, "grade": "A", "score": 6 },
{ "date": { "$date": 1358985600000 }, "grade": "A", "score": 10 },
{ "date": { "$date": 1322006400000 }, "grade": "A", "score": 9 },
{ "date": { "$date": 1299715200000 }, "grade": "B", "score": 14 }
],
"name": "Morris Park Bake Shop",
"restaurant_id": "30075445"
}
2.导入样例数据
a)准备一份数据并命名为primer-dataset.json,如附件所示。
b)将数据导入collection
在命令行或者shell终端,使用mongoimport将准备好的document插入test数据库中的restaurant collection中。
cd /Users/young/Desktop/MongoDB mongoimport --db test --collection restaurants --drop --file primer-dataset.json
如果test中已经存在restaurant collection,该操作将首先会drop掉restaurant collection。
mongoimport 默认连接上一个运行在本地的默认端口为27017的mongod实例。如果需要将数据导入其他的MongoDB,需要使用--host 和 --port 指出主机名和端口号。
3.Java Driver的概览
MongoDB的Java Driver是官方支持的。
a)下载MongoDB的Java驱动和BSON库文件。
http://mongodb.github.io/mongo-java-driver/?_ga=1.254442379.2073848550.1463710724
b)连接到MongoDB
使用com.mongodb.MongoClient类可以连接到运行的mongod实例。可以使用 com.mongodb.client.MongoDatabase接口访问一个指定的MongoDB数据库。
import com.mongodb.MongoClient; import com.mongodb.client.MongoDatabase; MongoClient mongoClient = new MongoClient(); MongoDatabase db = mongoClient.getDatabase("test");
4.调用Java驱动实现CRUD功能
a)插入数据
你可以使用insertOne方法将一个document插入到MongoDB的指定的collection中,如果这个collection不存在,MongoDB将会自动创建该collection并执行操作。
import com.mongodb.client.MongoDatabase; import org.bson.Document; import java.text.DateFormat; import java.text.ParseException; public void insertDocument(MongoDatabase db, String collection, Document document) throws ParseException { // DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", // Locale.ENGLISH); db.getCollection(collection).insertOne(document); }
这段代码将document插入db.collection中,定义document,可以使用 org.bson.Document :
new Document("address", new Document() .append("street", "2 Avenue") .append("zipcode", "10075") .append("building", "1480") .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", 11), new Document() .append("date", format.parse("2014-01-16T00:00:00Z")) .append("grade", "B") .append("score", 17))) .append("name", "Vella") .append("restaurant_id", "41704620")执行插入操作不返回任何结果。如果传递给insertOne的document不包含_id field,Java驱动将会自动增加该field并使用该_id对应的值生成对象id(ObjectId)。插入多个document可以使用 insertMany方法。
b)检索数据
你可以使用find方法发布一个查询从MongoDB中检索数据。在MongoDB中,所有的所有的查询是在一个单独的collection中。查询操作可以返回指定collection中所有的document或者匹配 org.bson.Document定义的过滤标准的document。
public FindIterable<Document> FindCollection(MongoDatabase db, String collection, Document document) { FindIterable<Document> iterator = null; if (null == document) iterator = db.getCollection(collection).find(); else iterator = db.getCollection(collection).find(document); return iterator; }
find方法返回一个生成document的 FindIterable的迭代器对象。
FindIterable<Document> iterator=mongoDBInstance.FindCollection(db, collection, null); iterator.forEach(new Block<Document>(){ @Override public void apply(final Document document) { System.out.println(document); } });使用MongoDB的Java Driver,用如下的的方式相等:
new Document( <field>, <value> )
如果 <field>是嵌套的,使用点记法访问。Java Driver同事提供了com.mongodb.client.model.Filters描述查询条件,该类提供了很多静态方法方便地创建插叙判断,如eq方法:
eq(<field>, <value>)//等于 lt(<field>, <value>)//小于 gt(<field>, <value>)//大于查询没有嵌套层的Field:
FindIterable<Document> iterable = mongoDBInstance.getCollection("restaurants").find( new Document("borough", "Manhattan"));或者使用Filters:
FindIterable<Document> iterable = mongoDBInstance.getCollection("restaurants").find( eq("borough", "Manhattan"));查询一个嵌套的Field:
FindIterable<Document> iterable = mongoDBInstance.getCollection("restaurants").find( eq("address.zipcode", "10075"));查询一个数组中的Field:
FindIterable<Document> iterable=mongoDBInstance.getCollection("restaurants").find(eq("grades.grade", "B"));c)更新document
可以使用 updateOne 、 updateMany、replaceOne方法更新collection中的document,这些方法都接受如下三种参数:
- filtes描述的document匹配规则
- 指定修改部分的document
- 其他可选的参数
需要注意的是_id这个Field是不可以被更新的。
1)更新顶级的Fields
如下代码更新了第一个name是Juni的document,用$set操作更新了cuisine为American (New),同时(append)用$currentDate操作更新了lastModified为当前时间。
mongoDBInstance.getCollection("restaurants").updateOne(new Document("name", "Juni"), new Document("$set", new Document("cuisine", "American (New)")) .append("$currentDate", new Document("lastModified", true)));2)更新嵌套的Field
相关推荐
以下是对MongoDB Java驱动2.5.3版本源码的一些关键知识点的详细解释: 1. **连接管理**: - `MongoClient`类是与MongoDB建立连接的主要入口点。它负责创建和管理`MongoServerAddress`对象,这些对象表示到MongoDB...
本篇将深入探讨"mongodb_java_2.6_API",即MongoDB 2.6版本的Java驱动程序API,了解如何使用Java进行MongoDB的开发。 1. **MongoDB Java驱动程序概述** MongoDB的Java驱动程序是Java开发者与MongoDB服务器通信的...
这份文档将详细介绍MongoDB Java驱动的所有类、接口和方法,包括如何连接数据库、操作集合、处理查询结果、事务管理等。它是开发者编写Java代码与MongoDB交互的重要参考资料,通过查阅文档,你可以了解每个API的使用...
10. **`com.mongodb.async.*`**:对于异步编程,MongoDB Java Driver提供了异步版本的客户端和集合操作,以配合Java 8的 CompletableFuture 或其他异步库。 了解这些核心概念后,开发者可以更有效地使用MongoDB ...
MongoDB的Java驱动3.2版本是连接Java应用程序与MongoDB数据库的重要组件,它提供了丰富的API,使得开发人员能够方便地执行CRUD(创建、读取、更新、删除)操作以及更复杂的数据库交互。MongoDB是一款流行的开源文档...
为了更好地理解和使用这个API,你可以查阅MongoDB Driver for Java 2.5.3的CHM文件,其中详细解释了每个类、接口和方法的功能和用法。这将帮助你编写出高效且健壮的MongoDB应用程序。在实际开发中,理解如何正确处理...
2. `mongodb-driver-3.9.1.jar`: 这是MongoDB Java驱动的主要部分,提供了与MongoDB服务器通信所需的类和接口。它实现了连接管理、命令执行、查询和写入操作等功能。开发者可以使用这个库来创建MongoClient实例,...
在"Java使用MongoDB的简单程序"中,我们将学习如何使用Java驱动程序连接到MongoDB数据库。Java驱动程序提供了一套API,使得开发者可以轻松地进行数据操作。基本步骤包括:创建MongoClient实例以连接到MongoDB服务器...
此外,`MongoDB Java驱动程序`的版本更新也会带来新的特性与改进,比如`mongo-2.5.3.jar`是较旧的一个版本,可能不包含最新的功能和性能提升。 为了更好地理解和使用MongoDB Java驱动程序,建议参考官方文档和社区...
MongoDB 3.4.2 是一个非常重要的版本,它为Java开发者提供了高效、可靠的数据库存储和查询功能。MongoDB是一个流行的开源、分布式文档数据库,它以JSON格式存储数据,支持丰富的查询语法,具备高性能、高可用性和可...
MongoDB是一个高性能、开源、无模式的文档型数据库,而Java驱动API则为Java开发者提供了一个直观且强大的接口来操作MongoDB。 首先,让我们了解一下MongoDB Java驱动API的基本结构和核心概念: 1. **MongoClient**...
本文将深入探讨如何使用Java的JDBC(Java Database Connectivity)接口与MongoDB、MySQL数据库进行数据交互,并实现相互之间的数据同步。 首先,我们需要理解JDBC,它是Java语言访问数据库的标准API,能够连接并...
它实现了所有的MongoDB协议,并提供了一系列的类和接口,如MongoClient、MongoDatabase和MongoCollection等,供开发者使用。通过这些API,你可以执行增删查改(CRUD)操作,实现数据的存储和检索。 二、连接MongoDB...
mongo-java-driver-3.4.3.jar 是 MongoDB 官方为 Java 开发者提供的 Java 驱动程序的一个特定版本(3.4.3)。这个 JAR 文件包含了与 MongoDB 数据库进行交互所需的类和接口,允许 Java 应用程序连接到 MongoDB 实例...
此外,你提到的CSDN博客链接提供了更详细的教程和示例代码,可以帮助你深入了解MongoDB Java驱动程序的使用。在那里,你可能会找到关于聚合操作、索引创建、事务处理等更高级主题的讨论。 总之,"mongodb_java_demo...
在Java中,我们可以使用MongoDB的Java驱动程序来实现对数据库的CRUD操作,即创建(Create)、读取(Retrieve)、更新(Update)和删除(Delete)。这里我们关注的是如何通过接口和实现类来实现这些功能。 首先,`...
MongoDB 2.2是MongoDB数据库的一个早期版本,它为开发者提供了丰富的功能,特别是对于Java应用程序来说。MongoDB是一个NoSQL数据库系统,以其高效、灵活的数据模型和强大的查询能力而受到广泛欢迎。在Java API方面,...
MongoDB的Java驱动是连接Java应用程序与MongoDB数据库的关键组件,3.7.0版本是这一驱动的一个稳定发行版。这个压缩包包含了三个核心的JAR文件,它们分别是`mongodb-driver-3.7.0.jar`、`mongodb-driver-core-3.7.0....
在Java中使用MongoDB,我们可以借助Spring Data MongoDB框架,它提供了一种简化的方式来操作MongoDB数据库。 首先,让我们了解Spring Data MongoDB的核心概念。Spring Data MongoDB为MongoDB提供了数据访问抽象层,...