连接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());

注意

使用FiltersSorts并 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 方法来指定过滤器和更新文档。在这里,我们更新符合过滤器的第一个文档iequals 10,并将其值设置i110

collection.updateOne(eq("i", 10), new Document("$set", new Document("i", 110)));

$inc 将字段的值增加指定的数量。
$mul 将字段的值乘以指定的数量。
$rename 重命名一个字段。
$setOnInsert 如果更新导致文档的插入,则设置字段的值。对修改现有文档的更新操作没有影响。
$set 设置文档中字段的值。
$unset 从文档中删除指定的字段。
$min 只有指定的值小于现有的字段值,才更新该字段。
$max 如果指定的值大于现有字段值,则仅更新该字段。
$currentDate 将字段的值设置为当前日期,作为日期或时间戳。

要更新与过滤器匹配的所有文档,请使用该updateMany 方法。在这里,我们增加的值i100其中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. 有序批量操作。

    在第一次写入错误时按顺序执行所有操作并将其错误输出。

  2. 无序批量操作。

    执行所有操作并报告任何错误。

    无序批量操作不能保证执行顺序。

我们来看看使用有序和无序操作的两个简单的例子:

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的更多相关文章

  1. MongoDB Java API操作很全的整理

    MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写,一般生产上建议以共享分片的形式来部署. 但是MongoDB官方也提供了其它语言的客户端操作API.如下图所示: 提供了C.C++ ...

  2. MongoDB JAVA API Filters

    Filters 该过滤器类为所有的MongoDB的查询操作静态工厂方法.每个方法返回BSON类型,又可以传递给期望一个查询过滤器的任何方法的一个实例. eq:匹配等于指定值的值.gt:匹配大于指定值的 ...

  3. mongoDb +Java+springboot

    前言 :mongoDb 是一种比较常用的非关系数据库,文档数据库, 格式为json ,redis 有五种格式. 1. 项目中要使用,这里简单做个示例.首先是连接mongoDB,用的最多的robomon ...

  4. MongoDB Java Driver操作指南

    MongoDB为Java提供了非常丰富的API操作,相比关系型数据库,这种NoSQL本身的数据也有点面向对象的意思,所以对于Java来说,Mongo的数据结构更加友好. MongoDB在今年做了一次重 ...

  5. springboot 学习之路 14(整合mongodb的Api操作)

    springboot整合mongodb: mongodb的安装和权限配置  请点击连接参考 mongodb集成 : 第一步:引如pom文件 第二步:配置文件配置mongodb路径: 第三步:关于mon ...

  6. Atitit 图像处理 调用opencv 通过java  api   attilax总结

    Atitit 图像处理 调用opencv 通过java  api   attilax总结 1.1. Opencv java api的支持 opencv2.4.2 就有了对java api的支持1 1. ...

  7. 【分布式】Zookeeper使用--Java API

    一.前言 上一篇博客我们通过命令行来操作Zookeper的客户端和服务端并进行相应的操作,这篇主要介绍如何通过API(JAVA)来操作Zookeeper. 二.开发环境配置 首先打开Zookeeper ...

  8. Elasticsearch的CRUD:REST与Java API

    CRUD(Create, Retrieve, Update, Delete)是数据库系统的四种基本操作,分别表示创建.查询.更改.删除,俗称"增删改查".Elasticsearch ...

  9. [转]HDFS中JAVA API的使用

    HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件.删除文件.读取文件内容等操作.下面记录一下使用JAVA API对HDFS中的文件进行操作的过程. 对分HDFS中的 ...

随机推荐

  1. python库学习笔记——分组计算利器:pandas中的groupby技术

    最近处理数据需要分组计算,又用到了groupby函数,温故而知新. 分组运算的第一阶段,pandas 对象(无论是 Series.DataFrame 还是其他的)中的数据会根据你所提供的一个或多个键被 ...

  2. BZOJ_3781_小B的询问_莫队

    BZOJ_3781_小B的询问_莫队 Description 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值 ...

  3. darknet源码学习

    darknet是一个较为轻型的完全基于C与CUDA的开源深度学习框架,其主要特点就是容易安装,没有任何依赖项(OpenCV都可以不用),移植性非常好,支持CPU与GPU两种计算方式.1.test源码( ...

  4. Java并发实现线程阻塞原语LockSupport

    LockSupport 和 CAS 是Java并发包中很多并发工具控制机制的基础,它们底层其实都是依赖Unsafe实现.LockSupport是用来创建锁和其他同步类的基本线程阻塞原语. 1.Lock ...

  5. JNI——JAVA调用C

    1. 编译java:javac JNIDemo.java 2. 编译JNI:gcc -I/usr/lib/jvm/java-1.8.0-openjdk-amd64/include/ -I/usr/li ...

  6. AndroidStudio设置“自动导入包”

    setting –-> Editor –-> General –-> Auto Inport 勾选这两项 单击 Apply –-> ok

  7. python_xrange和range的异同

    1,range: 函数说明:range([start,]stop[,step]),根据start和stop的范围以及步长step生成一个序列 代码示例: >>> range(5) [ ...

  8. 有关如何线程安全的使用map(hashMap)

    最近在写一个多线程中控制输出顺序的系统中的一个代码,使用了map的数据结构.具体的业务是需要一个单例的对象,然后需要在多线程的环境下实现添加和删除的操作.部分代码如下: public class Up ...

  9. 使用httpClient下载网页

    HttpCore 对HTTP协议客户端编程做了一些基本的封装.例如,格式化请求头和解析响应头.LineF ormatter用来格式化请求头信息,而实际的实现在BasicLineF ormatter 上 ...

  10. 51nod1414【思维】

    思路: 直接可以枚举1-n,如果枚举到是n的约数i,那么暴力枚举起点,其余点用i累加就一定是正多边形.复杂度是(n*n的公约数个数(最多80)): const int N=2e4+10; int a[ ...