`
jcs130
  • 浏览: 131368 次
  • 性别: Icon_minigender_1
  • 来自: Ottawa
社区版块
存档分类
最新评论

MongoDB 3.0 速上手教程(JAVA)

阅读更多

最近做项目想用一下NoSQL数据库,由于项目需要保存大量的json数据,我就选了MongoDB作为我的数据库。

最新版为3.0 下载安装都很容易,今天按照教程一步一步实现了增删改查等工作,本文将把要用到的代码都贴上来而且都做好中文注释方便大家阅读。

过程中发现两处不能使用教程中的代码实现的地方,经过查资料已经用另外的方法实现了,不知道是不是叫承重的代码出错了还是什么原因,如果有知道的朋友请留言告诉我,多谢~

 

官方教程链接:http://mongodb.github.io/mongo-java-driver/3.0/driver/getting-started/

 

如果不用maven附件中提供了已经下好的java驱动

 

package com.zhongli.TwitterGetter.app;

import java.util.*;

import org.bson.Document;
import org.bson.conversions.Bson;

import com.mongodb.BasicDBObject;
import com.mongodb.Block;
import com.mongodb.MongoClient;
import com.mongodb.client.*;
import com.mongodb.client.model.BulkWriteOptions;
import com.mongodb.client.model.DeleteOneModel;
import com.mongodb.client.model.InsertOneModel;
import com.mongodb.client.model.ReplaceOneModel;
import com.mongodb.client.model.UpdateOneModel;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;

import static com.mongodb.client.model.Filters.*;

/**
 * 程序入口
 * 
 * @author John
 *
 */
public class testmain {
	public static void main(String[] args) {
		testmain tm = new testmain();
		tm.test();
	}

	/**
	 * test
	 */
	private void test() {
		// 获取链接
		MongoClient mongoClient = new MongoClient("localhost", 27017);
		// 获取数据库
		MongoDatabase database = mongoClient.getDatabase("mydb");
		// 进入某个文档集
		MongoCollection<Document> collection = database.getCollection("test");

		/********************** 数据插入 ****************************/
		// // 创建新文档
		// Document doc = new Document("name", "MongoDB")
		// .append("type", "database").append("count", 1)
		// .append("info", new Document("x", 203).append("y", 102));
		// // 将文档插入文档集合
		// collection.insertOne(doc);
		//
		// // 创建一个包含多个文档的列表
		// List<Document> documents = new ArrayList<Document>();
		// for (int i = 0; i < 100; i++) {
		// documents.add(new Document("i", i));
		// }
		// // 向文档中插入列表
		// collection.insertMany(documents);

		/***************** 数据读取 ****************************************/
		// // 显示集合中的文档的数量
		// System.out.println(collection.count());
		//
		// // 查询集合中的第一个文档
		// Document myDoc = collection.find().first();
		// System.out.println(myDoc.toJson());
		//
		// //获取集合中的全部文档
		// MongoCursor<Document> cursor = collection.find().iterator();
		// try {
		// while (cursor.hasNext()) {
		// System.out.println(cursor.next().toJson());
		// }
		// } finally {
		// cursor.close();
		// }

		// //获取全部文档的另一种方法
		// for (Document cur : collection.find()) {
		// System.out.println(cur.toJson());
		// }

		// // 根据条件获取某分文档 eq:==
		// Document myDoc = collection.find(eq("i", 71)).first();
		// System.out.println(myDoc.toJson());

		// 通过查询语句一次性获取多个数据
		// Block<Document> printBlock = new Block<Document>() {
		// @Override
		// public void apply(final Document document) {
		// System.out.println(document.toJson());
		// }
		// };
		// 获得所有大于50的
		// collection.find(gt("i", 50)).forEach(printBlock);
		// 大于50 小于 100
		// collection.find(and(gt("i", 50), lte("i", 100))).forEach(printBlock);

		// 对输出文档进行排序,-1为递减,1为递增
		// 官方文档的例子有误:http://mongodb.github.io/mongo-java-driver/3.0/driver/getting-started/quick-tour/#sorting-documents
		// Document myDoc = collection.find(exists("i"))
		// .sort(new BasicDBObject("i", -1)).first();
		// System.out.println(myDoc.toJson());

		// 选择性输出结果中的元素,0为不显示,1为显示
		// 官方文档中的例子又不能用:http://mongodb.github.io/mongo-java-driver/3.0/driver/getting-started/quick-tour/#projecting-fields
		// BasicDBObject exclude = new BasicDBObject();
		// exclude.append("_id", 0);
		// // exclude.append("count", 0);
		// exclude.append("name", 1);
		// exclude.append("info", 1);
		// Document myDoc = collection.find().projection(exclude).first();
		// System.out.println(myDoc.toJson());

		/************************* 修改数据库中数据 *************************************/

		// 修改时的参数:
		// $inc 对指定的元素加
		// $mul 乘
		// $rename 修改元素名称
		// $setOnInsert 如果以前没有这个元素则增加这个元素,否则不作任何更改
		// $set 修改制定元素的值
		// $unset 移除特定的元素
		// $min 如果原始数据更大则不修改,否则修改为指定的值
		// $max 与$min相反
		// $currentDate 修改为目前的时间

		// //修改第一个符合条件的数据
		// $set 为修改
		// collection.updateOne(eq("i", 10), new Document("$set", new
		// Document("i", 110)));
		// // 获取全部文档,可以看到以前10的地方变成了110
		// for (Document cur : collection.find()) {
		// System.out.println(cur.toJson());
		// }

		// 批量修改数据并且返回修改的结果,讲所有小于100的结果都加100
		// UpdateResult updateResult = collection.updateMany(lt("i", 100),
		// new Document("$inc", new Document("i", 100)));
		// // 显示发生变化的行数
		// System.out.println(updateResult.getModifiedCount());
		// // 获取全部文档,可以看到除了刚才修改的110其他的全为了100
		// for (Document cur : collection.find()) {
		// System.out.println(cur.toJson());
		// }

		/************************** 删除数据 *****************************/
		// 删除第一个符合条件的数据
		// collection.deleteOne(eq("i", 110));
		// // 获取全部文档,可以看到没有110这个数了
		// for (Document cur : collection.find()) {
		// System.out.println(cur.toJson());
		// }

		// 删除所有符合条件的数据,并且返回结果
		// DeleteResult deleteResult = collection.deleteMany(gte("i", 100));
		// // 输出删除的行数
		// System.out.println(deleteResult.getDeletedCount());
		// // 获取全部文档,所有i>=100的数据都没了
		// for (Document cur : collection.find()) {
		// System.out.println(cur.toJson());
		// }
		/*************************** 程序块,一次执行多条语句 ********************************/
		// 按照语句先后顺序执行
		// collection.bulkWrite(Arrays.asList(new InsertOneModel<>(new Document(
		// "_id", 4)), new InsertOneModel<>(new Document("_id", 5)),
		// new InsertOneModel<>(new Document("_id", 6)),
		// new UpdateOneModel<>(new Document("_id", 1), new Document(
		// "$set", new Document("x", 2))), new DeleteOneModel<>(
		// new Document("_id", 2)),
		// new ReplaceOneModel<>(new Document("_id", 3), new Document(
		// "_id", 3).append("x", 4))));
		// // 获取全部文档
		// for (Document cur : collection.find()) {
		// System.out.println(cur.toJson());
		// }

		// 不按照语句先后顺序执行
		// collection.bulkWrite(Arrays.asList(new InsertOneModel<>(new Document(
		// "_id", 4)), new InsertOneModel<>(new Document("_id", 5)),
		// new InsertOneModel<>(new Document("_id", 6)),
		// new UpdateOneModel<>(new Document("_id", 1), new Document(
		// "$set", new Document("x", 2))), new DeleteOneModel<>(
		// new Document("_id", 2)),
		// new ReplaceOneModel<>(new Document("_id", 3), new Document(
		// "_id", 3).append("x", 4))), new BulkWriteOptions()
		// .ordered(false));
		// 获取全部文档
		// for (Document cur : collection.find()) {
		// System.out.println(cur.toJson());
		// }
		
		
		// 关闭数据库连接
		mongoClient.close();

	}

}

 

3
3
分享到:
评论
3 楼 God一冰魄 2016-08-18  
jcs130 写道
thebest 写道
感觉保存JSON数据会很浪费空间啊。如果每个记录的标签都是重复的。相当于是双倍的存储容量。这个怎么解决呢?

这个应该就是灵活性高的代价吧。。。我要用json存数据主要是因为从API获取的原始数据就是json格式的。。

如果数据不是非常重要,可以用dropDups消除重复,它保留第一个发现的文档,删除接下来的有重复值的文档
2 楼 jcs130 2015-08-19  
thebest 写道
感觉保存JSON数据会很浪费空间啊。如果每个记录的标签都是重复的。相当于是双倍的存储容量。这个怎么解决呢?

这个应该就是灵活性高的代价吧。。。我要用json存数据主要是因为从API获取的原始数据就是json格式的。。
1 楼 thebest 2015-08-18  
感觉保存JSON数据会很浪费空间啊。如果每个记录的标签都是重复的。相当于是双倍的存储容量。这个怎么解决呢?

相关推荐

    SpringMVC项目(MongoDB3.0)

    在本项目中,我们主要探讨的是如何在Spring MVC框架下集成MongoDB 3.0数据库,同时利用log4j2进行日志管理,并且运用注解进行程序的简化与优化。下面将对这些核心知识点进行详细阐述。 首先,Spring MVC是Spring...

    springmvc4.0+mongodb3.0 demo

    本项目以spring4.0+mongodb3.0为基础开发简易demo,对mongodb进行权限认证,简单增删改查,mapreduce,aggregate操作简单演示,java项目,非maven项目,使用之前先配好mongodb及其修改mongodb.properties里参数。

    mongoDB3.0以上连接工具.zip

    在“mongoDB3.0以上连接工具.zip”这个压缩包中,我们可以找到用于连接MongoDB 3.0及以上版本的工具,这些工具可能包括MongoDB Compass、Robo 3T (原名Robomongo)、MongoDB Shell等。这些工具都是为了帮助用户更高效...

    mongodb 3.0 suse11 64bit 安装包

    在SUSE Linux Enterprise Server 11(SLES11)64位操作系统上安装MongoDB 3.0版本,可以充分利用64位系统的内存资源,提供更优的性能和稳定性。以下是关于MongoDB 3.0在SUSE11 64bit环境下安装和使用的详细步骤及...

    mongodb3.0Linux版本的tgz包

    在这个“mongodb3.0Linux版本的tgz包”中,我们主要讨论的是MongoDB 3.0.8在Linux操作系统上的部署和使用。 MongoDB 3.0是其发展中的一个重要里程碑,它引入了许多新特性,提高了性能和可扩展性。以下是一些关键...

    MongoDB 3.0数据压缩测试.docx

    ### MongoDB 3.0 数据压缩测试分析 #### MongoDB 3.0 新特性概览 MongoDB 3.0 是在2015年3月3日正式发布的,与之前的2.0版本相比,它引入了大量的新功能和技术改进。其中最重要的一个特性就是加入了新的存储引擎...

    MongoDb 3.0 官方API

    近期学习MongoDb 需要查看API,可是官方只能从浏览器查询,没有办法下载,并且程序安装包中也没有docs。让我很是纠结,该文件是我自己爬虫、打包并制作成CHM贡献给大家。

    mongodb-linux-x86_64-rhel62-3.0.0.gz

    在本实例中,我们讨论的是针对Linux(尤其是RHEL62和CentOS)系统的MongoDB 3.0版本的安装包。 MongoDB 3.0是一个重要的版本更新,它引入了许多新特性,提升了性能和稳定性。首先,让我们来看看MongoDB 3.0的核心...

    64位roboMongo 支持mongoDB 3.0x

    此资源在mogoDB官网下载,为2016年9月份最新版本,64位。 ...robomongo是作为mogoDB数据库的可视化工具,你可以理解成SQL,MYSQL,里面能用鼠标控制的操作。 该robomongo版本是0.9.0,能支持最新的mongo3.x,...

    docker-mongo:容器中的MongoDB 3.0

    通过安装当前版本3.0.4的MongoDB,在hpess / chef映像上构建。 具有简单的副本集支持。用根据我们所有其他容器,一个简单的docker compose文件将使您轻松轻松地建立一个实例。 这将启动一个绑定到默认mongo端口的...

    使用spring连接及操作mongodb3.0实例

    MongoDB是当前非常流行的一个NoSQL数据库,而Spring框架则为Java开发者提供了强大的支持,包括与各种数据库的集成,MongoDB也...通过以上步骤,你可以轻松地在Java应用中连接并操作MongoDB 3.0,实现数据的存取和管理。

    MongoDB 3.0+安全权限访问控制详解

    MongoDB 3.0引入了更强大的安全权限访问控制,以增强数据库的安全性。相比于之前的版本,这个新特性对用户管理进行了重大改进,确保只有经过身份验证和授权的用户才能执行特定的操作。以下是对MongoDB 3.0安全权限...

    ansible-mongodb:Ansible 手册和配置 MongoDB(包括 MongoDB 3.0)的示例

    ansible-mongodb Ansible playbook 和用于配置简单 MongoDB(包括 MongoDB 3.0)的示例。 这对于想要深入了解 MongoDB(尤其是 3.0)并能够轻松(重新)创建环境的人们来说(目前)是很好的。要求Ansible (1.8.x) ...

    MongoDBjava各版本驱动下载

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

    mongoDB的java基础教程

    MongoDB的Java基础教程主要介绍了如何...综上所述,本教程为Java开发者提供了一个快速上手MongoDB的路径,介绍了从基础的连接和认证到文档操作和索引管理的全方位知识,为使用Java语言操作MongoDB打下了坚实的基础。

    Spring Data MongoDB API(Spring Data MongoDB 开发文档).CHM

    Spring Data MongoDB API。 Spring Data MongoDB 开发文档。

    linux版mongodb环境搭建

    ### Linux版MongoDB环境搭建详解 #### 一、前言 MongoDB 是一款非常流行的开源文档型数据库系统,因其灵活性和高性能而广泛应用于各种场景。本文档将详细介绍如何在Linux环境下搭建MongoDB运行环境,包括从创建...

    mongodb_java_2.6_API

    本篇将深入探讨"mongodb_java_2.6_API",即MongoDB 2.6版本的Java驱动程序API,了解如何使用Java进行MongoDB的开发。 1. **MongoDB Java驱动程序概述** MongoDB的Java驱动程序是Java开发者与MongoDB服务器通信的...

Global site tag (gtag.js) - Google Analytics