java mongo api_MONGODB的javaAPI简单应用

1 建立连接

要建立MongoDB的连接,你只要指定要连接到的数据库就可以。这个数据库不一定存在,如果不存在,MongoDB会先为你建立这个

库。同时,在连接时你也可以具体指定要连接到的网络地址和端口。下面的是连接本机数据库的一些例子:

import com.mongodb.Mongo;

import com.mongodb.DBCollection;

import com.mongodb.BasicDBObject;

import com.mongodb.DBObject;

import com.mongodb.DBCursor;

import com.mongodb.MongoAdmin;

Mongo db = new Mongo("mydb");

Mongo db = new Mongo("localhost", "mydb");

Mongo db = new Mongo("localhost", 27017, "mydb");

2 安全验证(非必选)

MongoDB服务可以在安全模式运行,此时任何客户端要连接数据库时需使用用户名和密码。在JAVA中可使用如下方法连接:

boolean auth = db.authenticate(userName, password);

如果用户名密码验证通过,返回值为true,否则为false

3 获取集合列表

每个数据库都存在零个或多个集合,需要时你可以获得他们的列表:

Set colls = db.getCollectionNames();

for(String s : colls){

System.out.println(s);

}

4 获得一个集合

要获得某个特定集合,你可以指定集合的名字,并使用getCollection()方法:

DBCollection coll = db.getCollection("testCollection");

当你获取了这个集合对象,你就可以对数据进行增删查改之类的操作。

5 插入文档

当你获得了一个集合对象,你就可以把文档插入到这个对象中。例如,存在一个JSON式的小文档:

{

"name" : "MongoDB",

"type" : "database",

"count" : 1,

"info" : {

x : 203,

y : 102

}

}

请注意,这个文档包含一个内部文档。我们可以使用BasicDBObject类来创建这个文档,并且使用insert()方法方便地将它插入到集

合中。

BasicDBObject doc = new BasicDBObject();

doc.put("name", "MongoDB");

doc.put("type", "database");

doc.put("count", 1);

BasicDBObject info = new BasicDBObject();

info.put("x", 203);

info.put("y", 102);

doc.put("info", info);

coll.insert(doc);

6 使用findOne()查找集合中第一个文档

要查找我们上一步插入的那个文档,可以简单地使用findOne()操作来获取集合中第一个文档。这个方法返回一个单一文档(这是相对于使用DBCursor的find()操作的返回),这对于只有一个文档或我们刚插入第一个文档时很有用,因为此时并不需要使用光标。

DBObject myDoc = coll.findOne();

System.out.println(myDoc);

返回类似:

{

"_id" : "ac907a1f5b9d5e4a233ed300" ,

"name" : "MongoDB" ,

"type" : 1 ,

"info" : {

"x" : 203 ,

"y" : 102} ,

"_ns" : "testCollection"

}

注意_id和_ns元素是由MongoDB自动加入你的文档。记住:MongoDB内部存储使用的元素名是以“_”做为开始。

7 加入多种文档

为了做更多有趣的查询试验,让我们向集合中加入多种文档类型,象:

{

"i" : value

}

可以通过循环来实现

for(int i = 0; i < 100; i++){

coll.insert(new BasicDBObject().append("i", i));

}

注意我们可以在一个集合中插入不同类型的文档,这就是我们所说的“模式自由”(schema-free)。

8 统计文档数量

使用getCount()方法

System.out.println(coll.getCount());

9 使用光标(cursor)来获取全部文档

为了获取集合中的所有文档,我们可以使用find()方法。这个方法返回一上DBCursor对象,来允许我们将符合查询条件的文档迭代

出来。

DBCursor cur = coll.find();

while(cur.hasNext()){

System.out.println(cur.next());

}

10 在查询中获取单一文档

我们可以创建一个查询,并传递给find()方法来获取集合中所有文档的一个子集。例如,我们想要查询域名为"i",并且值为71的文档:

BasicDBObject query = new BasicDBObject();

query.put("i", 71);

cur = coll.find(query);

while(cur.hasNext()){

System.out.println(cur.next());

}

11 使用条件查询获取集合

例如,我们想要查询所有i>50的文档:

BasicDBObject query = new BasicDBObject();

query.put("i", new BasicDBObject("$gt", 50));

cur = coll.find(query);

while(cur.hasNext()){

System.out.println(cur.next());

}

当然,我们也可以做20 < i <= 30的查询

BasicDBObject query = new BasicDBObject();

query.put("i", new BasicDBObject("$gt", 20).append("$lte", 30));

cur = coll.find(query);

while(cur.hasNext()){

System.out.println(cur.next());

}

12 创建索引

MongoDB支持索引,而且很容易在集合上增加索引。要创建索引,只需要指定要加索引的属性,并且指定升序(1)或降序即可(-1)。

coll.createIndex(new BasicDBObject("i", 1));

13 获取索引列表

List list = coll.getIndexInfo();

for(DBObject o : list){

System.out.println(o);

}

14 MongoDB管理函数

管理函数在com.mongodb.MongoAdmin类中定义。

例A:获取数据库列表

MongoAdmin admin = new MongoAdmin();

for(String s : admin.getDatabaseNames()){

System.out.println(s);

}

例B:获取数据库对象

Mongo m = admin.getDB("mydb");

例C:删除数据库

admin.dropDatabase("mydb");

15 用DBObject存储JAVA对象

MongoDB for JAVA驱动中提供了用于向数据库中存储普通对象的接口DBObject

例如,存在一个需要存储的对象类Tweet

public class Tweet implements DBObject{

/*...*/

}

可以使用如下代码:

Tweet myTweet = new Tweet();

myTweet.put("user", userId);

myTweet.put("message", message);

myTweet.put("date", new Date());

collection.insert(myTweet);

当一个文档从MongoDB中取出时,它会自动把文档转换成DBObject接口类型,要将它实例化为你的对象,需使用

DBCollection.setObjectClass()。

collection.setObjectClass(Tweet);

Tweet myTweet = (Tweet)collection.findOne();

16 JAVA驱动的并发性

JAVA的MongoDB驱动是线程安全的。如果你将它用在WEB服务中,可以创建它的一个单例,并在所有请求中使用它。

然而,如果你需要在一个会话(例如HTTP请求)中保证事务一致性,也许你会希望在这个会话中对驱动使用同一个端口。这仅仅在

请求量非常大的环境中,例如你经常会读取刚写入的数据。

为了这一点,你需要使用如下代码:

Mongo m;

m.restartStart();

// code.........

m.requestDone();

以上介绍了简单的mongoDB使用,更多信息请查阅MongoDB API for Java。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340489.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

wordpress致命错误怎么解决_pppoe错误是什么意思 pppoe错误怎么解决

最近有网友反应无线路由器上设置PPPoE拨号上网后&#xff0c;发现PPPoE连接不上&#xff0c;显示pppoe错误是什么意思呢?pppoe错误怎么解决呢?接下来详细为大家介绍&#xff1a;pppoe错误怎么解决无线路由器设置PPPoE拨号后&#xff0c;PPPoE拨号连接不上&#xff0c;不能够上…

java ssm 多租户_(十一)java B2B2C 源码 多级分销springmvc mybatis多租户电子商城系统- SSO单点登录之OAuth2.0登录流程(2)...

上一篇是站在巨人的肩膀上去研究OAuth2.0&#xff0c;也是为了快速帮助大家认识OAuth2.0&#xff0c;闲话少说&#xff0c;我根据框架中OAuth2.0的使用总结&#xff0c;画了一个简单的流程图(根据用户名密码实现OAuth2.0的登录认证)&#xff1a;上面的图很清楚的描述了当前登录…

hibernate 序列_Hibernate身份,序列和表(序列)生成器

hibernate 序列介绍 在上一篇文章中&#xff0c;我谈到了不同的数据库标识符策略。 这篇文章将比较最常见的替代主要关键策略&#xff1a; 身份 序列 表&#xff08;序列&#xff09; 身份 IDENTITY类型&#xff08;包括在SQL&#xff1a;2003标准中&#xff09;受以下支持…

java中date加1s_是否有一个java库将描述时间度量(例如“1d 1m 1s”)的字符串转换为毫秒?...

解析器不是太复杂&#xff1a;public static long parse(String input) {long result 0;String number "";for (int i 0; i < input.length(); i) {char c input.charAt(i);if (Character.isDigit(c)) {number c;} else if (Character.isLetter(c) &&…

几何画板200个经典课件_项目制学科联动 | 金芬娥首席工作室:灵动“画板”,研修创新,协同进步...

西湖区成立115个“项目制首席教师工作室”&#xff0c;建立中小学、幼儿园学科联动机制&#xff0c;以专业发展为目标&#xff0c;以教育问题为导向&#xff0c;整合发挥学科教研员、学科带头人和名师工作室领衔人的智力资源&#xff0c;助推教师的专业成长及区域的学科建设。西…

通过这些简单的步骤从头开始学习Java

Java是用于软件开发的最流行的编程语言之一。 无论您的最终目标或技能水平如何&#xff0c;学习和掌握Java都将为您作为开发人员打开大门。 今天&#xff0c;我们将讨论一些原因&#xff0c;我们认为您应该开始学习Java&#xff0c;然后提供有关入门的深入路线图。 为什么要学…

vs 服务容器中已存在服务_敏捷基础设施和公共基础服务

敏捷基础设施和公共基础服务敏捷基础设施和公共基础服务是微服务架构的有力支撑&#xff1b;能够简化业务开发&#xff0c;提升架构能力的基线。Cloud Native的基石是微服务架构、敏捷基础设施和公共基础服务。敏捷基础设施 - 通过容器封装环境&#xff0c;开发人员可以直接将所…

java 的简单代码_java初学 简单代码

1.简单的java程序public class RightAndWrong {public static void main(String argc[]){boolean bool true;if (bool false){System.out.println("This is wrong!");}else{System.out.println("This is right!");}}}//编译 javac RightAndWrong.java//…

使用php吧excel数据存到数据库,php如何存excel数据到数据库

一、使用PHPExcel Parser Pro软件&#xff0c;但是这个软件为收费软件&#xff1b;二、可将EXCEL表保存为CSV格式&#xff0c;然后通过phpmyadmin或者SQLyog导入&#xff0c;SQLyog导入的方法为&#xff1a;将EXCEL表另存为CSV形式&#xff1b;打开SQLyog&#xff0c;对要导入的…

sle linux lftp禁止匿名登陆_软件测试常用linux命令整理

作为一个名软件测试工程师&#xff0c;掌握Linux的基本操作是必须的。下面罗列下linux的常用命令&#xff0c;方便大家今后操作linux时查找&#xff0c;然后通过[帮助命令]进行具体的使用。1、帮助命令man -- man 命令 查看命令的使用帮助说明。2、显示目录和文件的命令ls --…

对编写的代码进行单元测试_编写数据访问代码测试–单元测试是浪费

对编写的代码进行单元测试几年前&#xff0c;我是为我的数据访问代码编写单元测试的那些开发人员之一。 我正在孤立地测试所有内容&#xff0c;我对自己感到非常满意。 老实说&#xff0c;我认为自己做得很好。 哦&#xff0c;男孩&#xff0c;我错了&#xff01; 这篇博客文章…

用php模拟斗地主发牌,php模拟实现斗地主发牌

本文实例为大家分享了php实现斗地主发牌的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下闲来无聊&#xff0c;就写了这个方法&#xff0c;也算是熟悉下php的数组操作&#xff0c;还请各位大神多指教。$arr 数组&#xff0c;好像有点问题&#xff0c;应该 2>"…

python odoo_Odoo开发教程20-使用 Python 虚拟环境安装 Odoo第二讲

配置插件(add-ons)路径社区贡献的插件可以打包成 Python 库&#xff0c;发布到 Python 包索引(PyPI -Python Package Index)&#xff0c;然后像其它库一样使用 pip 安装。为了能使用这一方法&#xff0c;Odoo 自动添加了 sitepackages/文件夹至插件配置路径&#xff0c;用于安装…

如何在AWS EC2实例上部署Spring Boot应用程序

你好朋友&#xff0c; 在本教程中&#xff0c;我们将看到如何在AWS EC2实例上部署Spring Boot应用程序。 这是我们将要执行的步骤。 1.使用Spring Boot Initialiser创建一个Spring Boot项目。 2.创建一个休息端点&#xff0c;部署后我们可以访问 3.启动EC2实例 4.将我们的…

ps -ef grep java解释,ps -ef | grep java(示例代码)

ps命令将某个进程显示出来grep命令是查找中间的|是管道命令 是指ps命令与grep同时执行PS是LINUX下最常用的也是非常强大的进程查看命令grep命令是查找&#xff0c;是一种强大的文本搜索工具&#xff0c;它能使用正则表达式搜索文本&#xff0c;并把匹配的行打印出来。grep全称是…

python世界第一语言_Java 跌落神坛!Python 正式登顶世界第一编程语言

编程语言流行指数(PYPL)排行榜近日公布了2019年2月份榜单。在最新一期榜单上&#xff0c;Python的份额高达26.42&#xff05;&#xff0c;稳居第一&#xff0c;并且猛增5.2%&#xff0c;同时成为增长势头最好的语言。而被挤到第二的Java&#xff0c;目前份额为21.2&#xff05;…

成为Java流大师–第3部分:终端操作

比尔盖茨曾经说过&#xff1a;“我选择一个懒惰的人去做一件困难的事情&#xff0c;因为一个懒惰的人会找到一个简单的方法来做。” 关于流&#xff0c;没有什么比这更真实了。 在本文中&#xff0c;您将学习Stream如何通过在调用终端操作之前不对源元素执行任何计算来避免不必…

python选项卡中文详细说明_pycharm窗口选项卡管理

1、主题我们已经注意到Pycharm的主编辑框是基于窗口选项卡机制显示的&#xff0c;Pycharm选项卡多种多样&#xff0c;这里我们将详细介绍这种选项卡机制。2、激活的选项卡每当我们打开一个Python文件时open a file for editing&#xff0c;它都会对应打开一个选项卡窗口&#x…

和至少为k的最短子数组 python_和至少为k的最短子数组

// 单调栈// 维护一个具有栈单调性的队列&#xff0c;跟动态规划不一样的是时间复杂度为O(n)// queue[i]中存放着前缀和// 我们知道因为负数的存在&#xff0c;所以队列不是单调增长的&#xff0c;但是不单调的其实对我们没有用// 因为肯定可以找到比它短的(因此我们移除比)// …

matlab多径信道模型,基于matlab的无线多径信道建模与仿真分析

基于matlab的无线多径信道建模与仿真分析 基于MATLAB的无线多径信道建模与仿真分析 摘 要:对于无线通信, 衰落是影响系统性能的重要因素, 而不同形式的衰落对于信号产生的影响 也不相同。本文在阐述移动多径信道特性的基础上, 建立了不同信道模型下多径时延效应的计算 机仿真模…