`
mj4d
  • 浏览: 299996 次
  • 性别: 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影响 

 

 

 

 

分享到:
评论

相关推荐

    深入云计算 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...

    MongoDB 批量插入及更新

    MongoDB 批量插入及更新, 版本号4.0.6,使用MongoDB.Driver.IMongoCollection.BulkWrite 进行批量数据插入或更新。

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

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

    深入云计算 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

    网络架构师148讲视频课程

    │ 第106节:MongoDB查询操作一.avi │ 第107节:MongoDB查询操作二.avi │ 第108节:聚合框架第一部分.avi │ 第109节:聚合框架第二部分.avi │ 第110节:聚合框架第三部分.avi │ 第111节:理解文档存储机制.avi ...

    ssm框架酒吧系统完整导入可运行带sql

    进去之后会触发一个页面刷新的方法,之后在里面填写寄存产品的信息 其中,会员信息和产品信息都是从数据库中查询出来的,可以进行自动赋值,还有寄存单号是自动生成的随机数,之后金额的value也是在后台自动计算出来...

    ssm航空系统可直接运行

    Java运行在eclipse软件上,数据库用mysql数据库 使用redis进行菜单缓存,mongodb进行日志管理以及webService技术调用接口。 开发与设计的总体思想 飞机航班信息管理系统主要分为用户和系统管理员2类,因此也...

    基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(TableGo v7.4.0版)

    2、新增导入SQL脚本功能,可以将SQL脚本一次同步到多个数据源 3、数据源新增密码加密功能,可自由选择加密或不加密 4、新增扩展数据库功能,并添加对武汉达梦、人大金仓V8、神舟通用、南大通用扩展支持 5、新增生成...

    ajax验证码异步刷新源码新手java-DevBooks:2021面试题,Java面试题、JVM面试题、多线程面试题、并发编程、设计模式面试题

    集合、JVM、多线程、并发编程、设计模式、SpringBoot、SpringCloud、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat、Python、HTML、...

    XiaoFeiChatBot 基于开源项目ChatterBot和QQBot而成,是一款QQ聊天机器人

    XiaoFeiChatBot 基于开源项目ChatterBot和QQBot而成,是一款QQ聊天机器人。实现QQ聊天机器人私聊,只有被群内其他成员 @ 时才会回复,增加了定时任务,可以定时向好友或群发消息了,更改机器人的数据库为高性能、可...

    ssm框架旅游管理系统导入可用带sql

    日志管理科:这块我们用mongodb非关系型数据库和Aop切面来进行我们项目的日志记录,它也是我们项目的技术难点之一。 三、其次介绍我们的用户系统,这个系统主要分为六个模块. 1.旅游景点管理:它就是展示了一些景点,...

    java8源码-springCloud-Order:用spring-cloud做的简单下单流程(tcc、分布式锁、事件驱动编程)

    java8 源码 Spring cloud shop 本系统参考https://github.com/FurionCS/springCloudShop项目进行学习,添加了很多新技术对系统进行了完善 开发环境 MySQL 5.7.17 RabbitMQ 3.6.6 Java8 with JCE Spring Cloud Camden...

    springboot学习

    chapter2-2-1:2.0 新特性(二):新增事件ApplicationStartedEvent Web开发 chapter3-1-1:构建一个较为复杂的RESTful API以及单元测试 chapter3-1-2:使用Thymeleaf模板引擎渲染web视图 chapter3-1-3:使用...

    程序员面试刷题的书哪个好-devbook:开发手册

    集合、JVM、多线程、并发编程、设计模式、SpringBoot、SpringCloud、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat、Python、HTML、...

    teamdashboard:DevOps团队绩效收集和可视化PoC,与“四个关键”和DORA指标保持一致

    团队仪表板 团队健康仪表板的概念证明 团队健康意识很重要。 , 对全球的DevOps转型产生了巨大影响,提供了有关如何衡量以保持对DevOps关键成果的关注的指南-不断提高价值吞吐量和稳定性。...新增团队

    DoraCMS内容管理系统-其他

    DoraCMS内容管理系统是基于Nodejs+eggjs+mongodb编写的一套内容管理系统,结构简单,较目前一些开源的cms,doracms易于拓展,特别适合前端开发工程师做二次开发。DoraCMS内容管理系统2.1.7 版本更新:添加了新的模板...

    Spring Cloud Finchley SR2全套(集成Spring Gateway)

    框架中的MongoDB项目是我用来作为文件服务器的一个实现,很简单实现了上传下载删除和预览的几个接口,大家可以看源码,有朋友问到秒传怎么做 这里只是简单说一个关键词(MD5)原理自行理解吧 Redis延迟消费的项目是...

    PowerJob-其他

    依赖精简:最小仅依赖关系型数据库(MySQL/Oracle/MS SQLServer...),扩展依赖为MongoDB(用于存储庞大的在线日志)。 高可用&amp;高性能:调度服务器经过精心设计,一改其他调度框架基于数据库锁的策略,实现了...

    DoraCMS内容管理系统源代码

    DoraCMS内容管理系统是基于Nodejs+eggjs+mongodb编写的一套内容管理系统,结构简单,较目前一些开源的cms,doracms易于拓展,特别适合前端开发工程师做二次开发。 DoraCMS内容管理系统2.1.5 版本更新: 抽离了邮件...

Global site tag (gtag.js) - Google Analytics