Java与mongodb的连接

1. 连单台mongodb

Mongo mg = new Mongo();//默认连本机127.0.0.1 端口为27017

Mongo mg = new Mongo(ip);//可以指定ip 端口默认为27017

Mongo mg = new Mongo(ip,port);//也可以指定ip及端口

2. 连双台mongodb

//ip为主机ip地址,port为端口号,dataBaseName相当于数据库名

DBAddress left = new DBAddress("ip:port/dataBaseName");

DBAddress right = new DBAddress("ip:port/dataBaseName ");

//若一个mongodb出现问题,会自动连另外一台

Mongo mongo = new Mongo(left, right);

3. 连多台mongodb

List mongoHostList = new ArrayList();

mongoHostList.add(new ServerAddress("ip",port));

mongoHostList.add(new ServerAddress("ip",port));

mongoHostList.add(new ServerAddress("ip",port));

Mongo mg = new Mongo(mongoHostList);

Java获取mongodb的数据库名

1. 获取mongodb的db(数据库)

//dataBaseName相当于关系数据库里的数据库名,mongodb中若没有该

//数据库名也不会报错,默认mongodb会建立这个数据库名,为空。

DB db = mg.getDB(dataBaseName);

注意:mongodb区分大小写,程序中一定要注意

2.mongodb的db安全认证

//安全认证java代码 返回true表示通过,false表示没通过不能进行操作

db.authenticate("userName", "password".toCharArray());

if(db.authenticate("admin", "123".toCharArray())){

System.out.println("连接mongodb成功...");

} else{

System.out.println("连接mongodb失败...");

}

Java对mongodb的collection进行crud操作

1.得到mongodb中的db的collection(表)

//参数tableName相当于关系数据库里的表名,

//若mongodb中没有该tableName,默认会创建该tableName,为空

DBCollection users = db.getCollection(tableName);

//列出库的集合列表,相对于表对象

Set colls = db.getCollectionNames();

for(String s : colls){

}

// 获取单个集合

DBCollection con = db.getCollection("users");

2.mongodb中的db的collection自增长主键

Mongodb中也像传统的关系数据库里表一样,有主键(_id)概念,用来唯一标识他们。当用户往collection中插入一条新记录的时候,如果没有指定_id属性,那么mongodb会自动生成一个ObjectId类型的值,保存为_id的值。

_id的值可以为任何类型,除了数组,在实际应用中,鼓励用户自己定义_id值,但是要保证他的唯一性。

传统的数据库中,通常用一个递增的序列来提供主键,在Mongodb中用ObjectId来代替,我们可以通过如下的方法来得到主键。

public class Tools {

/**

* 实现mongodb主键自增长的功能

* @param users

* @param tableName

* @return

*/

public static long getNext(DBCollection users,String tableName){

long incId = 0;

try {

DBObject ret = users.findAndModify(

new BasicDBObject("_id", tableName), null, null, false,

new BasicDBObject("$inc", new BasicDBObject("next", 1)),

true, true);

incId = Long.valueOf(ret.get("next").toString());

} catch (Exception e) {

e.printStackTrace();

}

return incId;

}

}

3.java对collection进行插入操作

DB db = m.getDB("testdb");

DBCollection con = db.getCollection("users");

//普通添加

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);

con.insert(doc); //插入对象

//特殊添加

// 添加多个特殊数据(模式自由)

for(int i = 1; i <=20; i++){

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

}

DBObject user_json = (DBObject)JSON.parse("{'user':[{'name':'AAA', 'age':'18'},{'name':'BBB', 'age':'19'}]}");

con.insert(user_json);

//添加JAVA对象

// 添加java对象,对象要序列化Serializable接口

UserInfo userinfo = new UserInfo("用户甲AA", 1);

User user = new User(1, "123", userinfo);

ByteArrayOutputStream os = new ByteArrayOutputStream();

ObjectOutputStream out = new ObjectOutputStream(os);

out.writeObject(user);

os.close(); out.close();

con.insert(MonGoUtil.insertObject("user_info",os.toByteArray()));

List list = new ArrayList();

list.add(new UserInfo("List1", 1));

list.add(new UserInfo("List2", 2));

list.add(new UserInfo("List3", 3));

ByteArrayOutputStream os = new ByteArrayOutputStream();

ObjectOutputStream out = new ObjectOutputStream(os);

out.writeObject(list);

os.close(); out.close();

con.insert(MonGoUtil.insertObject("lists",os.toByteArray()));

4.java对collection的查询操作

/** 输出获取到的文档 **/

public static void showDBCursor(DBCursor cur){

while(cur.hasNext()){

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

}

System.out.println();

}

高级查询

//查询_id为30000 返回cust_Id的值 ,mongodb查询都会返回主键的值

System.out.println(users.findOne(new BasicDBObject("_id",30000),new BasicDBObject("cust_Id",true)));

findAndRemove() 查询_id=30000的数据,并且删除

users.findAndRemove(new BasicDBObject("_id", 30000));

findAndModify介绍

users.findAndModify(

new BasicDBObject("_id", 28), //查询_id=28的数据

new BasicDBObject("cust_Id", true), //查询cust_Id属性

new BasicDBObject("notice_Id", true), //按照notice_Id排序

false, //查询到的记录是否删除,true表示删除

new BasicDBObject("province_Id", "100"), //将province_id的值改为100

true, //是否返回新记录 true返回,false不返回

true //如果没有查询到该数据是否插collection true入库,false不入

));

查询所有数据

//列出所有文档

BasicDBObject query = new BasicDBObject();

System.out.println("列出"+ con.getName() +"集合(表)的所有文档...");

showDBCursor(con.find());

查询JAVA对象

String key = "user_info";

BasicDBObject query = new BasicDBObject();

query.put(key, new BasicDBObject("$exists", true));

byte[] b = (byte[])con.findOne(query).get(key);

InputStream inputStream = new ByteArrayInputStream(b);

ObjectInputStream in = new ObjectInputStream(inputStream);

User users = (User) in.readObject();

System.out.println("用户对象_json:" + JSONArray.fromObject(users));

单一条件查询(数字)

BasicDBObject query = new BasicDBObject();

query.put("i", 11);

showDBCursor(con.find(query));

单一条件查询(字符串)

BasicDBObject query = new BasicDBObject();

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

showDBCursor(con.find(query));

$ne非等于查询

BasicDBObject query = new BasicDBObject();

query.put("name", new BasicDBObject("$ne", "MongoDB"));

showDBCursor(con.find(query));

根据列名查询

System.out.println("查询有'type'字段的数据..."); // false表示没有

BasicDBObject query = new BasicDBObject();

query.put("type", new BasicDBObject("$exists", true)); // false

showDBCursor(con.find(query));

单字段and查询

System.out.println("单字段and条件的使用,i>=2 and i<5 ,i:[2,5)...");

BasicDBObject query = new BasicDBObject();

query.put("i", new BasicDBObject("$gte", 2).append("$lt", 5));

showDBCursor(con.find(query));

多字段and查询

BasicDBObject query = new BasicDBObject();();

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

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

System.out.println(con.findOne(query));

showDBCursor(con.find(query));

单字段or查询

System.out.println("单字段or条件的使用,i<2 or i>=18...");

BasicDBList values = new BasicDBList();

values.add(new BasicDBObject("i", new BasicDBObject("$gte", 18)));

values.add(new BasicDBObject("i", new BasicDBObject("$lt", 2)));

BasicDBObject query = new BasicDBObject();();

query.put("$or", values);

showDBCursor(con.find(query));

多字段or查询

// "多字段or条件的使用,name:'MongoDB' or x:'203'..."

BasicDBList values = new BasicDBList(); ();

values.add(new BasicDBObject("name", "MongoDB"));

values.add(new BasicDBObject("x", 203));

BasicDBObject query = new BasicDBObject();();

query.put("$or", values);

showDBCursor(con.find(query));

$in 查询

System.out.println("in条件的使用$in...");

BasicDBList values = new BasicDBList(); ();

for (int i = 1; i <=10; i++) {

values.add(i);

}

BasicDBObject query = new BasicDBObject();();

query.put("i", new BasicDBObject("$in", values));

showDBCursor(con.find(query));

Order By 排序查询

System.out.println("排序[1=asc,-1=desc]...");

showDBCursor(con.find(query).sort(new BasicDBObject("i", -1)));

分页查询

// "分页查询的使用,总数据量:"+con.find(query).count()

con.find(query).limit(1); // 只取第1条数据

con.find(query).skip(1).limit(1); // 从1开始取1条数据,下标从0开始

con.find(query).sort(new BasicDBObject("i", -1)).skip(0).limit(5); // DESC后取5条数据

//findAndRemove()方法,删除查询到的数据,删除后的结果集

con.findAndRemove(new BasicDBObject("i", 1));

showDBCursor(con.find(query));

con.findAndRemove(new BasicDBObject("i", new BasicDBObject("$in", values))); //【注意:多个数值无效】

showDBCursor(con.find(query));

(not)  OR  (not in)查询

System.out.println("not,not in条件的使用$not");

BasicDBObject query = new BasicDBObject();();

query.put("i", new BasicDBObject("$not", new BasicDBObject("$in", values)));

showDBCursor(con.find(query));

Like模糊查询

System.out.println("like查询的使用...");

BasicDBObject query = new BasicDBObject();();

query.put("type", MonGoUtil.getLikeStr("a"));

showDBCursor(con.find(query));

根据字段类型查询

System.out.println("根据数据类型查询,字符类型...");

BasicDBObject query = new BasicDBObject();();

query.put("name", new BasicDBObject("$type", 2)); //字节

showDBCursor(con.find(query));

System.out.println("根据数据类型查询,整型...");

BasicDBObject query = new BasicDBObject();();

query.put("i", new BasicDBObject("$type", 16));

showDBCursor(con.find(query));

返回查询的部分字段

//"查询数据的部分字段,1表示只返回本字段,0表示返回除此字段之外的字段"

con.find(new BasicDBObject("name", MonGoUtil.getLikeStr("b")), new BasicDBObject("name", 1));

5.java对collection的更新操作

//查询id为300的记录,将cust_Id的值更新为6533615,一定要注意大小写,以及数据//类型,返回值为int表示所影响的记录条数

//可以用users.findOne(new BasicDBObject("_id",300));查看下,会发现这条记录//只返回两个字段了,分别为_id,cust_Id,别的字段都删除了。

users.update(new BasicDBObject("_id",300), new BasicDBObject ("cust_Id","6533615")).getN();

// 参数3表示数据库不存在是否添加(默认false),参数4表示是否多条修改(false只修改1条)

con.update(new BasicDBObject("name", "MongoDB"),

new BasicDBObject("$set", new BasicDBObject("type", "修改后的type"))).getN();

con.update(new BasicDBObject("name", "MongoDBs"),

new BasicDBObject("$set", new BasicDBObject("type", "修改后的type")), true, true).getN();

6.java对collection的删除操作

/移除cust_Id为6533615的数据。注意 用remove方法不释放磁盘空间,

//mongodb只在collection中做了标志,没有正在删除。

users.remove(new BasicDBObject("cust_Id","6533615")).getN();

//移除id>=1的数据

users.remove(newBasicDBObject("_id",new BasicDBObject("$gte",1))).getN();

//移除整个collection,drop也不释放磁盘空间

users.drop();

// 根据条件删除文档(数据)

BasicDBList rls = new BasicDBList();

for (int i = 11; i <= 20; i++) {

rls.add(i);

}

query.put("i", new BasicDBObject("$in", rls));

con.remove(query);

7.读取mongodb中Binary Data类型数据

Binary binary = (Binary) doc.get("Data");

byte[] data=binary.getData();

java 操作 mongodb_Java操作MongoDB数据库方法详解相关推荐

  1. java读写json格式的文件方法详解.txt,并批量存储进redis

    捐躯赴国难,视死忽如归.恸哭六军俱缟素,冲冠一怒为红颜.君子坦荡荡,小人长戚戚.风日晴和人意好,夕阳箫鼓几船归.民为贵,社稷次之,君为轻.Java 读写json格式的文件方法详解 文章录入:7747. ...

  2. java 复合_Java复合语句的使用方法详解

    与 C 语言及其他语言相同, Java 语言的复合语句是以整个块区为单位的语句,所以又称为块语句.下面我们来看看有关复合语句的使用方法和实例. 复合语句由开括号"{"开始,闭括号& ...

  3. java+getactionmap_Struts2 使用OGNL遍历map方法详解

    一.Action中的代码:MapAction.java package com.zx.demo.action; import java.util.ArrayList; import java.util ...

  4. java 方法体 out 参数_Java方法详解

    方法详解 1.方法的定义 Java方法是语句的集合,它们在一起执行一个功能 方法是解决一类问题的步骤的有序组合,包含于类或对象中:在程序中被创建,在其它地方被引用 设计方法的原则:要遵守原子性,即一个 ...

  5. Java String API 常用的String方法详解

    标题 String类的特性 Java中String类的构造方法 String类的 intern() 注意还跟jdk有关 如何保证变量S指向的是字符串常量池中的数据呢? 关于String中 new St ...

  6. Java语言求笛卡尔积,Java笛卡尔积算法原理与实现方法详解

    本文实例讲述了Java笛卡尔积算法原理与实现方法.分享给大家供大家参考,具体如下: 笛卡尔积算法的Java实现: (1)循环内,每次只有一列向下移一个单元格,就是CounterIndex指向的那列. ...

  7. Java去除字符串中空格的方法详解

    昨天写了一个关于Excel文件处理的脚本,在字符串匹配功能上总是出现多余不正确的匹配,debug调试之后,发现一个坑. 代码中字符串使用了replaceAll()方法,去除了所有空格(其中包括:首尾空 ...

  8. java post 发送_Java发送post方法详解

    总结一下java使用http发送post的方法: 1.post请求用于发送json 格式的参数: /** * post请求(用于请求json格式的参数) * * @param url 地址 * @pa ...

  9. Java中BigDecimal类的使用方法详解,常用最全系列!

    Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算.对于Double类型的运算,通常使用此类处理,来有效避免精度问题. 下面,我们从五个功能点 ...

最新文章

  1. (详细)Hibernate框架的搭建,Hibernate的CRUD操作(一)
  2. 自学Java和Java培训班的学习效果
  3. 双稳态电路的两个稳定状态是什么_从双稳态到双“更”稳态 ——叶芳伟课题组在拓扑光子学研究方向上取得新进展...
  4. 常见的视频格式有很多,用“格式工厂”转换大部分格式
  5. 在unity用shaderGraph做出类似动物之森的柱面场景,甚至球面场景。
  6. sklearn逻辑回归参数设置_【机器学习笔记】:逻辑回归实战练习(二)
  7. 二项式定理等价变换与简单推论
  8. Ambari集群里操作时典型权限问题put: `/home/bigdata/1.txt': No such file or directory的解决方案(图文详解)...
  9. java substring 实例_JAVA中截取字符串substring用法
  10. 简单PHP留言板之二 —— PHP的数据库连接文件
  11. 9.3 匿名性和隐私性
  12. ELk日志分析系统搭建
  13. 苹果iPad air技巧教程:50个实用小技巧
  14. 染色质调控区域的研究: 对CHIP-seq和ATAC-seq发展的深入思考
  15. 一篇文章教你整合ssm配置,可以收藏。
  16. JB的产品之旅-产品经理是干嘛的?
  17. php 搜索关键字,PHP获取搜索关键字有关问题_PHP教程
  18. 2021-10-09烧录固件芯片操作流程
  19. 在MindMapper中怎样进行添加附件
  20. 新浪微博开发之授权用户登录的实现

热门文章

  1. 利用matlab画混淆矩阵(confusion matrix)
  2. Python 脚本错误:IndentationError: unindent does not match any outer indentation level
  3. 【云炬大学生创业基础笔记】第1章第3节 什么是创业的讨论
  4. 学长毕业日记 :本科毕业论文写成博士论文的神操作20170402
  5. 经济学中的定量分析python_Sargent定量经济学(3):Python
  6. VTK修炼之道19:图像基本操作_图像像素值的访问与修改
  7. 分享自己的C#开发类库
  8. Delphi三层开发小技巧:TClientDataSet的Delta妙用
  9. C++中的STRING数据 重载 = 和数组下标
  10. Vulnhub靶机渗透之 AI: Web: 1