`
mj4d
  • 浏览: 301686 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java操作mongodb(一)之新增、查询

阅读更多

1、基于官方mongo-java-driver.2.9.1,在项目中pom依赖

<dependency>
	<groupId>org.mongodb</groupId>
	<artifactId>mongo-java-driver</artifactId>
	<version>2.9.1</version>
</dependency>

 2、mongodb启动

在win7-32中

mongod.exe --help
mongod.exe  --dbpath D:\mongodb\data\db --auth -logpath  D:\mongodb\log.log

 这里指定了数据库位置,--auth设置权限,这样访问mongo的所有数据库就需要授权才能访问。下面对数据库(sample)设置用户权限,在mongodb的shell中:

1、mongo.exe
2、use sample;
3、show collections;
system.indexes
system.users
user
4、db.addUser('sa','sa')
5、show collections;
Fri Oct 26 11:33:53 uncaught exception: error: {
	"$err" : "unauthorized db:sample lock type:-1 client:127.0.0.1",
	"code" : 10057
}
6、db.auth('sa','sa')
7、show collections;
system.indexes
system.users
user

 3、几个基本概念
这里借鉴熟知的jdbc链接的步骤,我们可以用如下的步骤来:

//1、建立连接
Mongo mongo = new Mongo("127.0.0.1", 27017);
//2、获取文档(数据库),这里为sample
DB db = mongo.getDB("sample");
//3、验证用户
if (db.authenticate("sa", "sa".toCharArray())) {
	//4、获取连接,这里是对集合user的操作
	DBCollection collection = db.getCollection("user");
	//对集合(表)进行各种操作(增删改查)
	DBObject obj = collection.findOne()
} 

以上的过程就类似我们建立一个jdbc的链接,其中与DriverManager、Connection、Statement 、ResultSet等很类似。
对在第二部中的安全设置是在shell中完成的,这里在DB中同样提供了对数据库操作的API:

 

DB db = mongo.getDB("sample");
db.addUser("sa", "sa".toCharArray());

 

4、基本操作

对集合的操作主要是在DBCollection中,提供了一系列增删改查抽象或方法。下面来依次来看看这些方法的使用。

4、1插入

这里主要采用insert的几种多态接口,提供了对单个或批量的支持,同时也支持插入策略限定(WriteConcern)

其中
DBObject是一个key-value的map对应保存数据库的数据
WriteConcern是控制写入策略,主要有三个方面的参数
public WriteConcern( int w , int wtimeout , boolean fsync ){
        this(w, wtimeout, fsync, false);
    }
w
-1 = don't even report network errors
0 = default, don't call getLastError by default
1 = basic, call getLastError, but don't wait for slaves
2+= wait for slaves

wtimeout how long to wait for slaves before failing
0 = indefinite
>0 = ms to wait

fsync  force fsync to disk
 我们以插入以下内容为例:
{"name" : "mongo" , "type" : "db" , "info" : { "comp" : "10gen" , "driver" : "java"}}
采用BasicDBObject封装插入数据,继承自DBObject,支持多种数据格式
//用BasicDBObject作为插入的封装数据
BasicDBObject user = new BasicDBObject();
user.put("name", "mongo");
user.put("type", "DB");

//这里是子对象
BasicDBObject info = new BasicDBObject();
info.put("comp", "10gen");
info.put("driver", "java");

user.put("info", info);

collection.insert(user);

采用BasicDBObjectBuilder

        BasicDBObjectBuilder builder = BasicDBObjectBuilder.start().add("name", "mongo").add("type", "DB");
        BasicDBObjectBuilder info = BasicDBObjectBuilder.start().add("comp", "10gen").add("driver", "java");
        builder.add("info", info.get());
        collection.insert(builder.get());

 同样也支持Map,用法与上面的一致。 对批量的支持也一样,传入List或DBObeject数组即可,如:

WriteResult result = collection.insert(list, WriteConcern.SAFE);

 这里是否返回插入错误信息依赖插入的策略WriteConcern.SAFE

 

4、2查找

更新一系列方法与插入类似,接受DBObject根据查询条件返回DBObject(单个)或DBCursor(多个)

下面是一些常用的api:

//查找一个,当然返回任意一个没多大实际意义
DBObject obj = collection.findOne();
//查找一个:name=mongo
DBObject obj = collection.findOne(new BasicDBObject("name", "mongo"));
//查找多个:满足name=mongo的所有结果集
DBCursor cursor = collection.find(new BasicDBObject("name", "mongo"));
//查找多个:满足age在(30,40]的所有结果集:"$gt": 大于 "$gte":大于等于 "$lt": 小于 "$lte":小于等于
DBCursor cursor = collection.find(new BasicDBObject("age", new BasicDBObject("$gt", 30).append("$lte", 40)));
//查询分页
DBCursor cursor = collection.find(new BasicDBObject("age", new BasicDBObject("$gt", 30).append("$lte", 60)))
                .skip(0).limit(5);
//模糊匹配:username like robin(正则匹配)
DBCursor cursor = collection.find(new BasicDBObject("username", Pattern.compile("robin")));
//根据子文档查询:
DBCursor cursor = collection.find(new BasicDBObject("info.comp", "10gen"));
//返回指定的列
DBCursor cursor = collection.find(new BasicDBObject("name", "mongo"),
                new BasicDBObject("name", 1).append("type", 1));

 以上DBCursor是数据库结果集的迭代,我们可以通过

DBCursor cursor = collection.find( query );
if( cursor.hasNext() )
     DBObject obj = cursor.next();

来获取数据。同时DBCursor还提供了对查询的限定,如前面说到的skip()、limit()等,还介绍几个常用的方法:

1、public DBCursor sort( DBObject orderBy )//与order by类似
2、public DBCursor hint( DBObject indexKeys )//强制使用索引
3、public DBObject explain() //explain不解释
4、public DBCursor batchSize( int n )//限制一次返回数据
5、public int count()//返回匹配的数量,不受limit/skip影响
6、public int size() //返回当前查询返回数量,受limit/skip影响 

 

 

 

 

分享到:
评论

相关推荐

    Java操作mongoDB使用文档.docx(16页.docx

    在本文档中,我们将探讨如何使用Java驱动程序进行基本的MongoDB操作,包括连接、添加、更新、查询和删除数据。 首先,开始之前,确保你已经安装了MongoDB服务器并在本地或远程运行(例如localhost:27017),并且在...

    收集的Mongodb资料

    6. 新增功能:介绍自第1版以来MongoDB新增的重要特性,如Change Streams、Transactions等。 7. MongoDB的运维:包含备份、恢复、日志分析和故障排查等运维实践。 8. 社区和生态:介绍MongoDB社区、工具生态系统和...

    MongoDB 批量插入及更新

    因此,MongoDB提供了批量操作的功能,能够一次性处理多个文档的插入或更新,显著提高操作效率。 #### 三、MongoDB批量操作实现方法 ##### 3.1 使用MongoDB.Driver库 在.NET Core中,可以通过`MongoDB.Driver`库来...

    Windows-MongoDB-4.4.1-x64.zip

    此外,开发人员可以使用各种编程语言(如Python、Java、Node.js等)与MongoDB交互,通过驱动程序连接到数据库,执行CRUD操作。MongoDB的灵活数据模型(文档型数据结构)使得数据存储和查询更加自然,特别适合处理非...

    深入云计算 MongoDB管理与开发实战详解pdf.part1

    15.1.3 Java对MongoDB数据库的基本操作 15.1.4 Java驱动的一致性 15.2 Java常用操作 15.2.1 Java对MongoDB的操作实例 15.2.2 对用户的操作 15.2.3 对集合的操作 15.2.4 对索引的操作 15.3 Java...

    Java多线程读取大文本文件并批量插入MongoDB的实战代码

    Java多线程读取大文本文件并批量插入MongoDB的代码,文本文件,csv文件,可以结合POI改造使其支持excel。 适合做大量文本数据或日志文件入库的场景,大文本被拆分成多个线程处理,速度快。 批量插入MongoDB,存在则...

    MongoDB-4.0-WIN64版

    MongoDB是一款开源、分布式、高性能的NoSQL数据库,特别适合处理海量数据和高并发场景。在Windows 64位环境下安装MongoDB 4.0版本,可以享受到其强大的功能和优化的性能。以下是对MongoDB 4.0及其在Windows 64位系统...

    mongodb pdf

    - 关键的数据库管理操作之一,涉及到如何在 MongoDB 中创建、删除索引以优化查询性能。 - **知识点**: - 创建索引的方法和语法。 - 删除索引的操作及注意事项。 - 不同类型的索引及其适用场景(例如单字段索引、...

    MongoDB_in_Action

    - **Java驱动集成**:书中可能涉及MongoDB Java驱动的使用方法,包括连接数据库、执行查询操作等基础功能。 - **高级功能**:如事务处理、批量操作、索引管理等高级功能,也会通过Java代码示例来讲解。 #### 四、...

    mongodb_64位 v3.4.zip

    - MongoDB驱动程序不断更新,以支持新版本的功能,例如MongoDB C#驱动、Java驱动等。 - `mongodump`和`mongorestore`工具也进行了改进,支持更多选项和备份恢复策略。 总的来说,MongoDB 3.4版本在保持易用性的...

    深入云计算 MongoDB管理与开发实战详解pdf.part2

    15.1.3 Java对MongoDB数据库的基本操作 15.1.4 Java驱动的一致性 15.2 Java常用操作 15.2.1 Java对MongoDB的操作实例 15.2.2 对用户的操作 15.2.3 对集合的操作 15.2.4 对索引的操作 15.3 Java...

    springboot整合mongodb

    mongodb版本号3.2,需手动开启http服务,启动时使用命令 ./mongod --httpinterface 新增 修改 删除 查询 排序 分页 可查看: https://blog.csdn.net/m0_37132783/article/details/96992439

    mongoDB资料

    12. **MongoDB最新版本的功能**:可能包含2012年之后MongoDB新增的重要功能,如新的查询语法、新的聚合框架特性等。 通过深入学习《10天掌握MongoDB》这本书,开发者可以系统地理解MongoDB的基础知识,快速上手并...

    mongodb-linux-x86_64-rhel62-3.6.0

    MongoDB是一款开源、分布式、高性能的NoSQL数据库,专为处理大量数据而设计。这个压缩包文件"mongodb-linux-x86_64-rhel62-3.6.0"是MongoDB针对Red Hat Enterprise Linux 6.2 (RHEL62)的64位Linux环境的一个特定版本...

    详解MongoDB数据库基础操作及实例

    MongoDB是一种流行的开源、文档型的NoSQL数据库系统,它以其灵活性、高性能和易于扩展性在处理大量非结构化和半结构化数据时受到了广泛欢迎。本文将详细讲解MongoDB数据库的基础操作,并通过实例来帮助理解和应用...

    mongodb-win32-i386-2.4.6安装包

    MongoDB是一款开源、高性能、无模式的分布式文档型数据库,被广泛应用于Web应用程序、大数据分析、内容管理系统等领域。本文将详细介绍“mongodb-win32-i386-2.4.6”这一版本的MongoDB在Windows 32位系统上的安装与...

    MongoDB中的加减乘除运算详解

    这个查询会在每个文档中新增一个 `total` 字段,表示商品的总费用。同样,`$add` 也可以用于时间运算。假设你想在日期字段 `date` 上增加三天,你可以这样操作: ```javascript db.sales.aggregate([ { $project: ...

    mongo-tail:关于尾随 MongoDB oplog 的 JAVA 项目示例

    总之,“mongo-tail”是一个用于实时跟踪 MongoDB 数据库变更的 Java 工具,通过它,开发者可以深入了解数据库操作,实现数据同步、监控或其他定制化的业务需求。深入研究该项目的源代码和实现细节,有助于提升对 ...

    金融风控系统(springboot+drools)、flink流计算、mongodb.zip

    本项目采用了先进的技术栈,包括SpringBoot、Drools规则引擎、Flink流计算框架以及MongoDB数据库,构建了一个高效、灵活且实时的风险控制解决方案。 SpringBoot是Java领域广泛使用的微服务开发框架,它简化了初始化...

    MongDB篇(带答案).pdf

    数据库可以看成是一个电子化的文件柜,用户可以对文件中的数据运行新增、检索、更新、删除等操作。数据库是一个所有集合的容器,在文件系统中每一个数据库都有一个相关的物理文件。 集合就是一组 MongoDB 文档。它...

Global site tag (gtag.js) - Google Analytics