加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 数据库 > MsSql > 正文

Java操作MongoDB数据库方法详解

发布时间:2020-05-24 06:11:06 所属栏目:MsSql 来源:互联网
导读:Java与mongodb的连接1.连单台mongodbMongomg=newMongo();//默认连本机127.0.0.1端口为27017Mongomg=newMongo(ip);//可以指定ip端口默认为27017

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

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,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",//按照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",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",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));

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读