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
目录
相关文章
|
6月前
|
NoSQL JavaScript 前端开发
Java访问MongoDB
Java访问MongoDB
66 21
|
6月前
|
SQL NoSQL Java
Java使用sql查询mongodb
通过MongoDB Atlas Data Lake或Apache Drill,可以在Java中使用SQL语法查询MongoDB数据。这两种方法都需要适当的配置和依赖库的支持。希望本文提供的示例和说明能够帮助开发者实现这一目标。
141 17
|
7月前
|
SQL NoSQL Java
Java使用sql查询mongodb
通过使用 MongoDB Connector for BI 和 JDBC,开发者可以在 Java 中使用 SQL 语法查询 MongoDB 数据库。这种方法对于熟悉 SQL 的团队非常有帮助,能够快速实现对 MongoDB 数据的操作。同时,也需要注意到这种方法的性能和功能限制,根据具体应用场景进行选择和优化。
280 9
|
9月前
|
NoSQL Java 数据库连接
MongoDB Java
10月更文挑战第18天
61 3
|
9月前
|
存储 JSON NoSQL
Java 中MongoDB的使用
Java 中MongoDB的使用
45 2
|
Java Android开发
WSDL2Java操作指南
1. 安装JDK1.5, 配置系统环境变量:     下载安装JDK后, 设置环境变量:     JAVA_HOME=C:\Program Files\Java\jdk1.5.0_02     Path=%Path%;%JAVA_HOME%\bin(这里的%Path%指你系统已经有的一系列配置)     CLASSPATH=%JAVA_HOME%\lib  2. 下载axis,
1496 0
|
2月前
|
算法 Java 调度
Java多线程基础
本文主要讲解多线程相关知识,分为两部分。第一部分涵盖多线程概念(并发与并行、进程与线程)、Java程序运行原理(JVM启动多线程特性)、实现多线程的两种方式(继承Thread类与实现Runnable接口)及其区别。第二部分涉及线程同步(同步锁的应用场景与代码示例)及线程间通信(wait()与notify()方法的使用)。通过多个Demo代码实例,深入浅出地解析多线程的核心知识点,帮助读者掌握其实现与应用技巧。
|
5月前
|
存储 监控 Java
【Java并发】【线程池】带你从0-1入门线程池
欢迎来到我的技术博客!我是一名热爱编程的开发者,梦想是编写高端CRUD应用。2025年我正在沉淀中,博客更新速度加快,期待与你一起成长。 线程池是一种复用线程资源的机制,通过预先创建一定数量的线程并管理其生命周期,避免频繁创建/销毁线程带来的性能开销。它解决了线程创建成本高、资源耗尽风险、响应速度慢和任务执行缺乏管理等问题。
297 60
【Java并发】【线程池】带你从0-1入门线程池
|
3月前
|
Java 中间件 调度
【源码】【Java并发】从InheritableThreadLocal和TTL源码的角度来看父子线程传递
本文涉及InheritableThreadLocal和TTL,从源码的角度,分别分析它们是怎么实现父子线程传递的。建议先了解ThreadLocal。
141 4
【源码】【Java并发】从InheritableThreadLocal和TTL源码的角度来看父子线程传递
|
2月前
|
Java
java 多线程异常处理
本文介绍了Java中ThreadGroup的异常处理机制,重点讲解UncaughtExceptionHandler的使用。通过示例代码展示了当线程的run()方法抛出未捕获异常时,JVM如何依次查找并调用线程的异常处理器、线程组的uncaughtException方法或默认异常处理器。文章还提供了具体代码和输出结果,帮助理解不同处理器的优先级与执行逻辑。

推荐镜像

更多