Mongodb的Java操作

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: MongoDB中的一条记录就是一个文档(document),里面存储了由字段和值对构成的数据结构。文档看起来很像JSON对象,字段的值可以是数组、其他文档,也可以是文档数组: { "_id" : ObjectId("54c955492b7c8eb21818bd09"), ...

MongoDB中的一条记录就是一个文档(document),里面存储了由字段和值对构成的数据结构。文档看起来很像JSON对象,字段的值可以是数组、其他文档,也可以是文档数组:

{
   "_id" : ObjectId("54c955492b7c8eb21818bd09"),
   "address" : {
      "street" : "2 Avenue",
      "zipcode" : "10075",
      "building" : "1480",
      "coord" : [ -73.9557413, 40.7720266 ],
   },
   "borough" : "Manhattan",
   "cuisine" : "Italian",
   "grades" : [
      {
         "date" : ISODate("2014-10-01T00:00:00Z"),
         "grade" : "A",
         "score" : 11
      },
      {
         "date" : ISODate("2014-01-16T00:00:00Z"),
         "grade" : "B",
         "score" : 17
      }
   ],
   "name" : "Vella",
   "restaurant_id" : "41704620"
}

 

MongoDB将文档存储在集合(collection)中,集合也就是关系型数据库的表。不过和表不一样的是,集合完全不要求内部文档必须模式一致。文档也有主键,而且名称必须是_id。你不提供它就会自动添加。

由于MongoDB的文档格式类似于JSON,所以可以从JSON文件导入数据,只要数据格式合法。比如我们把 https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/dataset.json 的内容保存起来,命名为dbset.json。我们通过下面这条命令导入这些数据到集合restaaurants中:

mongoimport --db test --collection restaurants --drop --file dbset.json

 工具是mongoimport,数据库是test,后面指定了文件源。这个工具的更详细介绍参考 https://docs.mongodb.org/manual/reference/program/mongoimport/#bin.mongoimport 。

 

通过Java操作MongoDB要用到俩jar包:Uber MongoDB Java Driver和BSON,官方给了maven集成方式:

<dependencies>
    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongo-java-driver</artifactId>
        <version>3.0.4</version>
    </dependency>
    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>bson</artifactId>
        <version>3.0.4</version>
    </dependency>
</dependencies>

 但是我尝试了不行,只能自己下载了。

 

访问数据库的方法如下:

MongoClient mongoClient = new MongoClient();
MongoDatabase db = mongoClient.getDatabase("test");

 插入数据有四个方法:

 我们试一下第三个

DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.CHINA);
		Document document = new Document("address",
				new Document("street", "avenue 2").append("zipcode", "200000").append("building", "1480").append(
						"coord",
						Arrays.asList(-73.9557413,
								40.7720266)))
										.append("borough",
												"一个省")
										.append("Country", "中国")
										.append("grades",
												Arrays.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("hotel_id", "41704620");
		database.getCollection("restaurants").insertOne(document);

 

 之后我们把数据查询一下:

FindIterable<Document> iterable = db.getCollection("restaurants").find();
iterable.forEach(new Block<Document>() {
    @Override
    public void apply(final Document document) {
        System.out.println(document);
    }
});

 可以看到多了一个_id字段。

如果想有针对性的检索,可以传入一个文档:

FindIterable<Document> iterable = db.getCollection("restaurants").find(
        new Document("borough", "哈哈哈"));

 (这个匹配失败了所以没有东西返回)

更新数据的方法也比较简单,第一个参数用来检索,第二个是新数据。

 比如:

db.getCollection("restaurants").updateOne(new Document("restaurant_id", "41156888"),
        new Document("$set", new Document("address.street", "East 31st Street")));

 将会更新address.street。

如果要改的字段太多,可以使用replaceOne

 

删除数据使用delete:

 比如

db.getCollection("restaurants").deleteMany(new Document("borough", "Manhattan"));

 全部删除的话可以

db.getCollection("restaurants").deleteMany(new Document());

 连集合都不要的话可以

db.getCollection("restaurants").drop();

 最后说一下索引的建立

db.getCollection("restaurants").createIndex(new Document("cuisine", 1));

 使用createIndex,指定为哪个字段键索引,1是升序,-1是降序。

索引相关的方法有这些:

 

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
13天前
|
NoSQL Java 数据库连接
MongoDB Java
10月更文挑战第18天
12 3
|
27天前
|
存储 JSON NoSQL
Java 中MongoDB的使用
Java 中MongoDB的使用
14 2
|
2月前
|
NoSQL JavaScript Java
Java Python访问MongoDB
Java Python访问MongoDB
22 4
|
4月前
|
存储 Java 索引
Java ArrayList操作指南:如何移除并返回第一个元素
通过上述方法,你可以方便地从Java的 `ArrayList` 中移除并返回第一个元素。这种操作在日常编程中非常常见,是处理列表时的基本技能之一。希望这篇指南能帮助你更好地理解和运用Java的 `ArrayList`。
46 4
|
4月前
|
DataWorks NoSQL fastjson
DataWorks操作报错合集之DataX进行MongoDB全量迁移的过程中,DataX的MongoDB Reader插件在初始化阶段找不到Fastjson 2.x版本的类库,该怎么办
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
4月前
|
分布式计算 DataWorks Java
DataWorks操作报错合集之使用ODPS Tunnel Upload功能时,遇到报错:Java 堆内存不足,该如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
3月前
|
NoSQL Java 关系型数据库
MongoDB保姆级指南(下):无缝集成SpringData框架,一篇最全面的Java接入指南!
前面的两篇文章已经将MongoDB大多数知识进行了阐述,不过其中的所有内容,都基于原生的MongoDB语法在操作。可是,在实际的日常开发过程中,我们并不会直接去接触MongoDB,毕竟MongoDB只能算作是系统内的一个组件,无法仅依靠它来搭建出一整套系统。
102 0
|
1月前
|
存储 关系型数据库 MySQL
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景比较
|
9天前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第21天】本文探讨了MongoDB Atlas的核心特性、实践应用及对云原生数据库未来的思考。MongoDB Atlas作为MongoDB的云原生版本,提供全球分布式、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了云原生数据库的未来趋势,如架构灵活性、智能化运维和混合云支持,并分享了实施MongoDB Atlas的最佳实践。
|
10天前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第20天】本文探讨了MongoDB Atlas的核心特性、实践应用及对未来云原生数据库的思考。MongoDB Atlas作为云原生数据库服务,具备全球分布、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了实施MongoDB Atlas的最佳实践和职业心得,展望了云原生数据库的发展趋势。