当前位置: 移动技术网 > IT编程>数据库>MongoDB > Java操作MongoDB数据库方法详解

Java操作MongoDB数据库方法详解

2018年01月29日  | 移动技术网IT编程  | 我要评论

蛮妃要出墙,亚马逊 日本,侃侃照片

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<serveraddress> mongohostlist = new arraylist<serveraddress>();

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<string> 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<userinfo> list = new arraylist<userinfo>();
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();

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网