Mongodb JAVA API
连接mongodb
1.连接一个mongodb
);
2.连接mongodb集群 MongoClient mongoClient =
), new ServerAddress("localhost", 27018), new ServerAddress("localhost", 27019)));
or
MongoClientURI connectionString =
new MongoClientURI("mongodb://localhost:27017,localhost:27018,localhost:27019");
获取数据库
MongoDatabase database = mongoClient.getDatabase("mydb");
获取数据库列表
client.listDatabaseNames().forEach(new Block<String>() {
@Override
public void apply(final String s) {
System.out.println(s);
}
});
获取集合
MongoCollection<Document> collection = database.getCollection("test");
插入文档
要使用Java驱动程序创建文档,请使用 Document
该类。您也可以使用此类创建嵌入式文档。
Document doc = new Document("name", "MongoDB") .append("type", "database") .append("count", 1) .append("info", new Document("x", 203).append("y", 102));
collection.insertOne(doc);
添加多个文档
要添加多个文档,可以使用该insertMany()
方法。
List<Document> list = new ArrayList<>();
for(int i=0;i<50;i++){
list.add(new Document().append("i:", i));
}
collection.insertMany(list);
对集合计数
col.count();
查询集合
使用该 find()
方法查询集合。
在集合中找到第一个文档
要获取集合中的第一个文档,请调用操作 first()
方法find()
。collection.find().first()
返回第一个文档或null而不是一个游标。这对于只应该匹配单个文档的查询或者仅对第一个文档感兴趣才有用。
以下示例打印集合中找到的第一个文档。
Document first = collection.find().first();
System.out.println(first.toJson());
查找集合中的所有文档
要检索集合中的所有文档,我们将使用该 find()
方法。该find()
方法返回一个FindIterable
为链接或控制查找操作提供流畅界面的实例。使用该 iterator()
方法来获取与查询和迭代匹配的文档集合的迭代器。以下代码检索集合中的所有文档并将其打印出来(101个文档):
FindIterable<Document> find = collection.find();
MongoCursor<Document> iterator = find.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next().toJson());
}
获取具有查询过滤器的单个文档
我们可以创建一个过滤器来传递给find()方法来获取我们集合中的一个文档子集。例如,如果我们想要找到“i”字段的值为71的文档,我们将执行以下操作:
)).first(); System.out.println(myDoc.toJson());
注意
使用Filters
,Sorts
并 Projections
为建立查询的简单明了的方式帮手。
获取一组查询文档
我们可以使用查询从我们的集合中获取一组文档。例如,查询i>50的所有文档,"i" > 50
,我们可以写:
Block<Document> printBlock = new Block<Document>() { @Overridepublic void apply(final Document document) { System.out.println(document.toJson()); } }; collection.find(gt("i", 50)).forEach(printBlock);
请注意,我们使用对每个文档应用块的forEach
方法,FindIterable
并将所有文档打印在其中i > 50
。
我们也可以得到一个范围,说50 < i <= 100
:
collection.find(and(gt("i", 50), lte("i", 100))).forEach(printBlock);
排序文件
我们也可以使用Sorts
帮助器对文档进行排序。我们通过调用一个sort()
方法来添加一个查找查询FindIterable
。下面我们使用 exists()
帮助器对我们的文档进行排序:
MongoCursor<Document> iterator = collection.find(exists("i:")).sort(new BasicDBObject("i:",-1)).iterator(); //当"i:"存在的时候,才会进行排序,不存在时,不输出
while(iterator.hasNext()){
System.out.println(iterator.next().toJson());
}
投影领域
有时我们不需要文档中包含的所有数据,Projections
帮助程序可以帮助构建查找操作的投影参数。下面我们将对该集合进行排序,排除该_id
字段并输出第一个匹配的文档:
Document first = collection.find().projection(new BasicDBObject("_id",0)).first(); //表示_id字段不需要 如果是1表示只要_id字段
System.out.println(first.toJson());
更新文档
MongoDB支持许多更新操作。
要最多更新一个文档(如果不匹配过滤器,可以为0),请使用该updateOne
方法来指定过滤器和更新文档。在这里,我们更新符合过滤器的第一个文档i
equals 10
,并将其值设置i
为110
:
collection.updateOne(eq("i", 10), new Document("$set", new Document("i", 110)));
$inc |
将字段的值增加指定的数量。 |
$mul |
将字段的值乘以指定的数量。 |
$rename |
重命名一个字段。 |
$setOnInsert |
如果更新导致文档的插入,则设置字段的值。对修改现有文档的更新操作没有影响。 |
$set |
设置文档中字段的值。 |
$unset |
从文档中删除指定的字段。 |
$min |
只有指定的值小于现有的字段值,才更新该字段。 |
$max |
如果指定的值大于现有字段值,则仅更新该字段。 |
$currentDate |
将字段的值设置为当前日期,作为日期或时间戳。 |
要更新与过滤器匹配的所有文档,请使用该updateMany
方法。在这里,我们增加的值i
由100
其中i
小于100
。
), new Document("$inc", new Document("i", 100))); System.out.println(updateResult.getModifiedCount());//更新方法返回一个UpdateResult
提供有关操作的信息,包括更新修改的文档数。
删除文件
最多只能删除一个文档(如果没有匹配过滤器,可以为0)使用以下deleteOne
方法:
));或collection.deleteOne(new Document("i",110));
要删除与过滤器匹配的所有文档,请使用该deleteMany
方法。
这里我们删除i
大于或等于的所有文档100
:
));
System.out.println(deleteResult.getDeletedCount());//delete方法返回一个DeleteResult
,提供有关操作的信息,包括删除的文档数量。
批量操作
这些新命令允许执行批量插入/更新/删除操作。批量操作有两种类型:
有序批量操作。
在第一次写入错误时按顺序执行所有操作并将其错误输出。
无序批量操作。
执行所有操作并报告任何错误。
无序批量操作不能保证执行顺序。
我们来看看使用有序和无序操作的两个简单的例子:
1.保证顺序执行
List<WriteModel<Document>> writes = new ArrayList<WriteModel<Document>>();
writes.add(new InsertOneModel<Document>(new Document("i:", 8)));
writes.add(new InsertOneModel<Document>(new Document("i:", 9)));
writes.add(new InsertOneModel<Document>(new Document("i:", 6)));
writes.add(new UpdateOneModel<Document>(new Document("i:", 6), new Document("$set", new Document("i:", 10))));
writes.add(new DeleteOneModel<Document>(new Document("i:", 10)));
writes.add(new ReplaceOneModel<Document>(new Document("i:", 8), new Document("i:", 111).append("x", 4)));
col.bulkWrite(writes);
2.不保证顺序执行
writes.add(new InsertOneModel<Document>(new Document("i:", 8)));
writes.add(new InsertOneModel<Document>(new Document("i:", 9)));
writes.add(new InsertOneModel<Document>(new Document("i:", 6)));
writes.add(new UpdateOneModel<Document>(new Document("i:", 6), new Document("$set", new Document("i:", 10))));
writes.add(new DeleteOneModel<Document>(new Document("i:", 10)));
writes.add(new ReplaceOneModel<Document>(new Document("i:", 8), new Document("i:", 111).append("x", 4)));
col.bulkWrite(writes,new BulkWriteOptions().ordered(false));
更多地址:
http://mongodb.github.io/mongo-java-driver/3.0/driver/getting-started/quick-tour/
Mongodb JAVA API的更多相关文章
- MongoDB Java API操作很全的整理
MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写,一般生产上建议以共享分片的形式来部署. 但是MongoDB官方也提供了其它语言的客户端操作API.如下图所示: 提供了C.C++ ...
- MongoDB JAVA API Filters
Filters 该过滤器类为所有的MongoDB的查询操作静态工厂方法.每个方法返回BSON类型,又可以传递给期望一个查询过滤器的任何方法的一个实例. eq:匹配等于指定值的值.gt:匹配大于指定值的 ...
- mongoDb +Java+springboot
前言 :mongoDb 是一种比较常用的非关系数据库,文档数据库, 格式为json ,redis 有五种格式. 1. 项目中要使用,这里简单做个示例.首先是连接mongoDB,用的最多的robomon ...
- MongoDB Java Driver操作指南
MongoDB为Java提供了非常丰富的API操作,相比关系型数据库,这种NoSQL本身的数据也有点面向对象的意思,所以对于Java来说,Mongo的数据结构更加友好. MongoDB在今年做了一次重 ...
- springboot 学习之路 14(整合mongodb的Api操作)
springboot整合mongodb: mongodb的安装和权限配置 请点击连接参考 mongodb集成 : 第一步:引如pom文件 第二步:配置文件配置mongodb路径: 第三步:关于mon ...
- Atitit 图像处理 调用opencv 通过java api attilax总结
Atitit 图像处理 调用opencv 通过java api attilax总结 1.1. Opencv java api的支持 opencv2.4.2 就有了对java api的支持1 1. ...
- 【分布式】Zookeeper使用--Java API
一.前言 上一篇博客我们通过命令行来操作Zookeper的客户端和服务端并进行相应的操作,这篇主要介绍如何通过API(JAVA)来操作Zookeeper. 二.开发环境配置 首先打开Zookeeper ...
- Elasticsearch的CRUD:REST与Java API
CRUD(Create, Retrieve, Update, Delete)是数据库系统的四种基本操作,分别表示创建.查询.更改.删除,俗称"增删改查".Elasticsearch ...
- [转]HDFS中JAVA API的使用
HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件.删除文件.读取文件内容等操作.下面记录一下使用JAVA API对HDFS中的文件进行操作的过程. 对分HDFS中的 ...
随机推荐
- 51nod1674:区间的价值2(分治,利用&和|的收敛性)
lyk拥有一个区间. 它规定一个区间的价值为这个区间中所有数and起来的值与这个区间所有数or起来的值的乘积. 例如3个数2,3,6.它们and起来的值为2,or起来的值为7,这个区间对答案的贡献为2 ...
- python装饰器精髓代码
#!/usr/bin/env python #-*- coding:utf-8 -*- import time def foo(func): def inner(): print('fs...') f ...
- BZOJ_4026_dC Loves Number Theory _主席树+欧拉函数
BZOJ_4026_dC Loves Number Theory _主席树+欧拉函数 Description dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯 竭 ...
- 「UVA10298」 Power Strings(KMP
题目描述 PDF 输入输出格式 输入格式: 输出格式: 输入输出样例 输入样例#1: 复制 abcd aaaa ababab . 输出样例#1: 复制 1 4 3 题解 Luogu的题解 这里是对目前 ...
- Relative atomic mass
Relative atomic mass Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Oth ...
- kafka数据可靠性深度解读【转】
1 概述 Kakfa起初是由LinkedIn公司开发的一个分布式的消息系统,后成为Apache的一部分,它使用Scala编写,以可水平扩展和高吞吐率而被广泛使用.目前越来越多的开源分布式处理系统如Cl ...
- Bean的基于注解的配置方式
Boss.class import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.a ...
- set和multiset容器
set和multiset容器的能力 set 和multiset容器的内部结构通常由平衡二叉树(balanced binary tree)来实现.当元素放入容器中时,会按照一定的排序法则自动排序,默认是 ...
- HDU1083 【匹配问题】
题意: 有P门课,N个学生,给出每门课上的人. 然后问你能不能使得每门课有一个课代表 思路: 课和学生是两类,且同类之间没有关系,构成二分图:直接就是一个最大匹配问题: 注意点: 1.是给课进行匹配不 ...
- C++函数返回值与引用
对于函数的返回值,看似简单,但并非如此,比如: int func(int a);该函数会返回一个int型,如果进行一个调用int result=func(3);会发生什么情况? 首先,func将返回值 ...