MongoDB学习(五)使用Java驱动程序3.3操作MongoDB快速入门
【引言】
毕竟现在MongoDB还是出于成长阶段,所以现在网上相关的资料很少,而且大部分还都是针对于MongoDB的老版本的。再加上MongoDB的频繁升级、重大更新等等,导致菜鸟学习的难度增大。
好了,前几篇讲的都是MongoDB数据库相关的知识,最终,还是要与java来接轨(当然,卤煮是搞java开发的)。看了看现在的java驱动版本截至目前2016年8月27日为止为3.3,与网上搜索到的教程很多写法不一致,所以卤煮在此决定研究一下官网的教程,希望能对自己或者其他人有一点帮助,足矣...
ps:本文只是官网的一个快速入门,让我这样的菜鸟能了解个大概,有些地方可能还需要深入的学习才能读懂。本人水平有限,有些地方有删减,翻译不到位的地方还请各位看官海涵并留言指出,本人一定虚心学习改正,以免误导!
O shit!突然想起来,MongoDB的java驱动也不好找,忘了给大家提供干货了,特地快马加鞭的补上:mongo-java-driver-3.3.0.jar下载
【翻译篇】
官网原文地址:戳这里
MongoDB驱动程序快速入门
1.创建一个连接
- // 简单直接的连接数据库,默认为本机地址localhost,端口号27017
- MongoClient mongoClient = new MongoClient();
- // 或者像这样指定连接地址
- MongoClient mongoClient = new MongoClient( "localhost" );
- // 或者像这样指定连接地址和端口号
- MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
- // 或者像这样连接到一个副本集,需要提供一个列表
- MongoClient mongoClient = new MongoClient(
- Arrays.asList(new ServerAddress("localhost", 27017),
- new ServerAddress("localhost", 27018),
- new ServerAddress("localhost", 27019)));
- // 或者使用连接字符串
- MongoClientURI connectionString = new MongoClientURI("mongodb://localhost:27017,localhost:27018,localhost:27019");
- MongoClient mongoClient = new MongoClient(connectionString);
- // 获取到数据库对象mydb,如果不存在则自动创建
- MongoDatabase database = mongoClient.getDatabase("mydb");
注意
通常,对于一个数据库集群你仅仅只需要创建一个MongoClient实例,并且使用它来贯穿你的整个应用程序。当创建多个实例的时候:
- 注意每个MongoClient实例的所有资源使用限制(最大连接数等等)
- 销毁实例,请确保你调用
MongoClient.close()来清理资源
2.获取一个集合
- MongoCollection<Document> collection = database.getCollection("test");
3.插入一个文档
- {
- "name" : "MongoDB",
- "type" : "database",
- "count" : 1,
- "info" : {
- x : 203,
- y : 102
- }
- }
- Document doc = new Document("name", "MongoDB")
- .append("type", "database")
- .append("count", 1)
- .append("info", new Document("x", 203).append("y", 102));
- collection.insertOne(doc);
4.插入多个文档
你可以使用insertMany()方法来插入多个文档。
- { "i" : value }
在一个循环中创建文档:
- List<Document> documents = new ArrayList<Document>();
- for (int i = 0; i < 100; i++) {
- documents.add(new Document("i", i));
- }
把这些文档插入到集合中,把这个文档列表传递给insertMany()方法:
- collection.insertMany(documents);
5.统计集合中的文档数量
- System.out.println(collection.count());
6.查询集合
6.1查询集合中的第一个文档
- Document myDoc = collection.find().first();
- System.out.println(myDoc.toJson());
这个例子将会输出以下内容:
- { "_id" : { "$oid" : "551582c558c7b4fbacf16735" },
- "name" : "MongoDB", "type" : "database", "count" : 1,
- "info" : { "x" : 203, "y" : 102 } }
注意
_id字段是由MongoDB自动添加到文档中的,从而与其他的文档进行区分展示。MongoDB保留所有以“_”、“$”为开始的字段名,以供内部使用。
6.2查询集合中的所有文档
要检索集合中的所有文档,需要使用find()方法。该方法返回了一个提供灵活接口的FindIterable实例来控制查询操作。使用iterator()方法可以得到一个匹配查询条件的文档集迭代器。下面的代码检索了集合中的所有文档,并且把它们输出来(101个文档)
- 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());
- }
7.使用查询过滤器得到一个单一的文档
- import static com.mongodb.client.model.Filters.*;
- myDoc = collection.find(eq("i", 71)).first();
- System.out.println(myDoc.toJson());
- { "_id" : { "$oid" : "5515836e58c7b4fbc756320b" }, "i" : 71 }
注意
可以使用 Filters, Sorts, Projections 和Updates类来创建简单明了的查询方式。
8.查询一组文档
- // 现在使用范围查询来得到一个大点的子集
- Block<Document> printBlock = new Block<Document>() {
- @Override
- public void apply(final Document document) {
- System.out.println(document.toJson());
- }
- };
- collection.find(gt("i", 50)).forEach(printBlock);
请注意,在这里我们在FindIterable 上面使用了forEach()方法,并且打印出了所有 i>50的文档。
- collection.find(and(gt("i", 50), lte("i", 100))).forEach(printBlock);
9.排序
- myDoc = collection.find(exists("i")).sort(descending("i")).first();
- System.out.println(myDoc.toJson());
exists():查询含有指定字段的文档
10.字段投影
- myDoc = collection.find().projection(excludeId()).first();
- System.out.println(myDoc.toJson());
11.聚合
- collection.aggregate(asList(
- match(gt("i", 0)),
- project(Document.parse("{ITimes10: {$multiply: ['$i', 10]}}")))
- ).forEach(printBlock);
12.更新文档
- collection.updateOne(eq("i", 10), set("i", 110));
要更新所有匹配过滤器的文档,需要使用updateMany()方法。这里我们使用Updates.inc()方法来对i<100的文档进行增加100(即i+100):
- UpdateResult updateResult = collection.updateMany(lt("i", 100), inc("i", 100));
- System.out.println(updateResult.getModifiedCount());
更新方法返回一个UpdateResult对象,该对象提供了包括更新文档的数量等信息。
13.删除文档
- <span style="font-size:18px;">collection.deleteOne(eq("i", 110));</span>
使用deleteMany()方法来删除匹配过滤的所有文档。
这里我们删除i>=100的所有文档:
- DeleteResult deleteResult = collection.deleteMany(gte("i", 100));
- System.out.println(deleteResult.getDeletedCount());
删除方法返回一个DeleteResult对象,该对象中提供了包括删除文档数量等信息。
14.批量操作
):有序批量操作。
执行所有预定操作,当出现写入错误时会停止操作。
无序批量操作。
执行所有操作,并报告所有的错误。
无序批量操作不保证所有操作的执行。
- // 2. 有序批量操作,调用是有保证的
- 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))));
- // 2. 无序批量操作,调用没有保证
- 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));
重要
当MongoDB的服务器版本为2.6以下时,不推荐使用bulkWrite方法,因为这是第一个支持批量插入、更新、删除命令的服务器版本,在某种程度上,可以让驱动程序实现BulkWriteResult和BulkWriteException的正确的语义。该方法仍然会在2.6以下版本的服务器工作,但性能将受到影响,因为每个写操作将会被单独执行一次。
MongoDB学习(五)使用Java驱动程序3.3操作MongoDB快速入门的更多相关文章
- mongodb学习(3)--- NodeJs使用mongoose操作mongodb
转载: https://cnodejs.org/topic/50c145ed637ffa4155c7eaee 首先对于以下错误说明(有写 db.close): Error: db object alr ...
- MongoDB学习笔记(2):数据库操作及CURD初步
MongoDB学习笔记(2):数据库操作及CURD 数据库操作 创建数据库 首先MongoDB中数据库的创建和数据库的切换都是使用命令,USE DATABASE,如果要切换的数据库不存在则会进行创建, ...
- 【MongoDB详细使用教程】四、python操作MongoDB
目录 1.安装pymongo 2.连接数据库 3.操作数据库 3.1.查 3.2.增 3.3.改 3.4.删 使用第三方库pymongo来实现python对MongoDB的操作 pymongo官方文档 ...
- Java 图片处理解决方案:ImageMagick 快速入门
一.ImageMagick介绍 ImageMagick是一个免费的创建.编辑.合成图片的软件,可以实现图片切割.颜色替换.图片缩略图.图片水印等各种效果.ImageMagick是免费开源软件,支持大多 ...
- Java 图片处理解决方案:ImageMagick 快速入门教程
文章首发于[博客园-陈树义],点击跳转到原文Java 图片处理解决方案:ImageMagick 快速入门教程. ImageMagick介绍 ImageMagick是一个免费的创建.编辑.合成图片的软件 ...
- MongoDB的安装配置、基本操作及Perl操作MongoDB
MongoDB的安装配置.基本操作及Perl操作MongoDB http://www.myhack58.com/Article/60/63/2014/42353.htm
- [转载]MongoDB学习 (五):查询操作符(Query Operators).1st
本文地址:http://www.cnblogs.com/egger/archive/2013/05/04/3059374.html 欢迎转载 ,请保留此链接๑•́ ₃•̀๑! 查询操作符(Quer ...
- Java学习笔记十:Java的数组以及操作数组
Java的数组以及操作数组 一:什么是数组: 数组可以理解为是一个巨大的“盒子”,里面可以按顺序存放多个类型相同的数据,比如可以定义 int 型的数组 scores 存储 4 名学生的成绩 数组中的元 ...
- MongoDB学习笔记(一)——Windows 下安装MongoDB
首先从官网下载mongodb的windows安装包,根据自己系统类型选择32位或者64位版本安装即可,然后根据提示一路下一步即可安装完成.如果没有修改安装目录会默认安装在C:\Program Fil ...
随机推荐
- 大话存储1——存储系统的发展,计算机I/O
1 存储发展 存储在这里的含义为信息记录,是伴随人类活动出现的技术. 1. 竹简和纸张 竹简是中国古代使用的记录文字的工具,后来被纸张所取代,如图1.1所示. 2. 选数管 选数管是20世纪中期出现的 ...
- centos linux系统日常管理3 服务管理ntsysv,chkconfig,系统日志rsyslog,last ,lastb ,exec,xargs,dmesg,screen,nohup,curl,ping ,telnet,traceroute ,dig ,nc,nmap,host,nethogs 第十六节课
centos linux系统日常管理3 服务管理ntsysv,chkconfig,系统日志rsyslog,last ,lastb ,exec,xargs,dmesg,screen,nohup,cur ...
- Mysql5.7.10新加用户
INSERT INTO mysql.user(HOST,USER,authentication_string,ssl_cipher,x509_issuer,x509_subject,select_pr ...
- selenium自我手册
(转载需注明原文地址和作者两项,否则视为非授权) 语言:python 0x00 预热 下载安装包 pip install selenium 确定所用的浏览器 支持firefox,chrome,IE,e ...
- Django组件拾忆
知识预览 一 Django的form组件 二 Django的model form组件 三 Django的缓存机制 四 Django的信号 五 Django的序列化 回到顶部 一 Django的form ...
- QML类型说明-ParallelAnimation
ParallelAnimation ImportStatement: import QtQuick2.2 Inherits: Animation DetailedDescription S ...
- Qt的信号和槽是如何工作的
用Qt做过开发的朋友,不知道是否曾为下面这些问题疑惑过:我们知道Qt是基于C++的,Qt写的代码最终还是要由C++编译器来编译,但是我们的Qt代码中有很多C++里没有的关键字,比如slots\sign ...
- mailx配置安装
mailxwget http://ftp.debian.org/debian/pool/main/h/heirloom-mailx/heirloom-mailx_12.5.orig.tar.gztar ...
- vw 、vh、vmin 、vmax
转自:https://blog.csdn.net/romantic_love/article/details/80868909 vw.vh.vmin.vmax是一种视窗单位,也是相对单位. 它相对的不 ...
- [UI基础][QQ登陆界面]
[目标] 1.QQ号码文本框要有“请输入QQ号码”的提示(用户输入时会自动消失) 2.QQ密码文本框要有“请输入QQ密码”的提示(用户输入文字会自动消失) 3.QQ号码文本框只能输入数字 4.QQ密码 ...