今天就跟大家聊聊有关Java中怎么操作MongoDB数据库,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

Java与mongodb的连接

1. 连单台mongodb

Mongomg=newMongo();//默认连本机127.0.0.1端口为27017Mongomg=newMongo(ip);//可以指定ip端口默认为27017Mongomg=newMongo(ip,port);//也可以指定ip及端口

2. 连双台mongodb

//ip为主机ip地址,port为端口号,dataBaseName相当于数据库名DBAddressleft=newDBAddress("ip:port/dataBaseName");DBAddressright=newDBAddress("ip:port/dataBaseName");//若一个mongodb出现问题,会自动连另外一台Mongomongo=newMongo(left,right);

3. 连多台mongodb

List<ServerAddress>mongoHostList=newArrayList<ServerAddress>();mongoHostList.add(newServerAddress("ip",port));mongoHostList.add(newServerAddress("ip",port));mongoHostList.add(newServerAddress("ip",port));Mongomg=newMongo(mongoHostList);Java获取mongodb的数据库名

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

//dataBaseName相当于关系数据库里的数据库名,mongodb中若没有该//数据库名也不会报错,默认mongodb会建立这个数据库名,为空。DBdb=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,为空DBCollectionusers=db.getCollection(tableName);//列出库的集合列表,相对于表对象Set<String>colls=db.getCollectionNames();for(Strings:colls){}//获取单个集合DBCollectioncon=db.getCollection("users");

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

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

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

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

publicclassTools{/***实现mongodb主键自增长的功能*@paramusers*@paramtableName*@return*/publicstaticlonggetNext(DBCollectionusers,StringtableName){longincId=0;try{DBObjectret=users.findAndModify(newBasicDBObject("_id",tableName),null,null,false,newBasicDBObject("$inc",newBasicDBObject("next",1)),true,true);incId=Long.valueOf(ret.get("next").toString());}catch(Exceptione){e.printStackTrace();}returnincId;}}

3.java对collection进行插入操作

DBdb=m.getDB("testdb");DBCollectioncon=db.getCollection("users");//普通添加BasicDBObjectdoc=newBasicDBObject();doc.put("name","MongoDB");doc.put("type","database");doc.put("count",1);BasicDBObjectinfo=newBasicDBObject();info.put("x",203);info.put("y",102);doc.put("info",info);con.insert(doc);//插入对象//特殊添加//添加多个特殊数据(模式自由)for(inti=1;i<=20;i++){con.insert(newBasicDBObject().append("i",i));}DBObjectuser_json=(DBObject)JSON.parse("{'user':[{'name':'AAA','age':'18'},{'name':'BBB','age':'19'}]}");con.insert(user_json);//添加JAVA对象//添加java对象,对象要序列化Serializable接口UserInfouserinfo=newUserInfo("用户甲AA",1);Useruser=newUser(1,"123",userinfo);ByteArrayOutputStreamos=newByteArrayOutputStream();ObjectOutputStreamout=newObjectOutputStream(os);out.writeObject(user);os.close();out.close();con.insert(MonGoUtil.insertObject("user_info",os.toByteArray()));List<UserInfo>list=newArrayList<UserInfo>();list.add(newUserInfo("List1",1));list.add(newUserInfo("List2",2));list.add(newUserInfo("List3",3));ByteArrayOutputStreamos=newByteArrayOutputStream();ObjectOutputStreamout=newObjectOutputStream(os);out.writeObject(list);os.close();out.close();con.insert(MonGoUtil.insertObject("lists",os.toByteArray()));

4.java对collection的查询操作

/**输出获取到的文档**/publicstaticvoidshowDBCursor(DBCursorcur){while(cur.hasNext()){System.out.println(cur.next());}System.out.println();}

高级查询

//查询_id为30000返回cust_Id的值,mongodb查询都会返回主键的值System.out.println(users.findOne(newBasicDBObject("_id",30000),newBasicDBObject("cust_Id",true)));findAndRemove()查询_id=30000的数据,并且删除users.findAndRemove(newBasicDBObject("_id",30000));findAndModify介绍users.findAndModify(newBasicDBObject("_id",28),//查询_id=28的数据newBasicDBObject("cust_Id",true),//查询cust_Id属性newBasicDBObject("notice_Id",true),//按照notice_Id排序false,//查询到的记录是否删除,true表示删除newBasicDBObject("province_Id","100"),//将province_id的值改为100true,//是否返回新记录true返回,false不返回true//如果没有查询到该数据是否插collectiontrue入库,false不入));

查询所有数据

//列出所有文档BasicDBObjectquery=newBasicDBObject();System.out.println("列出"+con.getName()+"集合(表)的所有文档...");showDBCursor(con.find());

查询JAVA对象

Stringkey="user_info";BasicDBObjectquery=newBasicDBObject();query.put(key,newBasicDBObject("$exists",true));byte[]b=(byte[])con.findOne(query).get(key);InputStreaminputStream=newByteArrayInputStream(b);ObjectInputStreamin=newObjectInputStream(inputStream);Userusers=(User)in.readObject();System.out.println("用户对象_json:"+JSONArray.fromObject(users));

单一条件查询(数字)

BasicDBObjectquery=newBasicDBObject();query.put("i",11);showDBCursor(con.find(query));

单一条件查询(字符串)

BasicDBObjectquery=newBasicDBObject();query.put("name","MongoDB");showDBCursor(con.find(query));

$ne非等于查询

BasicDBObjectquery=newBasicDBObject();query.put("name",newBasicDBObject("$ne","MongoDB"));showDBCursor(con.find(query));

根据列名查询

System.out.println("查询有'type'字段的数据...");//false表示没有BasicDBObjectquery=newBasicDBObject();query.put("type",newBasicDBObject("$exists",true));//falseshowDBCursor(con.find(query));

单字段and查询

System.out.println("单字段and条件的使用,i>=2andi<5,i:[2,5)...");BasicDBObjectquery=newBasicDBObject();query.put("i",newBasicDBObject("$gte",2).append("$lt",5));showDBCursor(con.find(query));

多字段and查询

BasicDBObjectquery=newBasicDBObject();();query.put("name","MongoDB");query.put("type","database");System.out.println(con.findOne(query));showDBCursor(con.find(query));

单字段or查询

System.out.println("单字段or条件的使用,i<2ori>=18...");BasicDBListvalues=newBasicDBList();values.add(newBasicDBObject("i",newBasicDBObject("$gte",18)));values.add(newBasicDBObject("i",newBasicDBObject("$lt",2)));BasicDBObjectquery=newBasicDBObject();();query.put("$or",values);showDBCursor(con.find(query));

多字段or查询

//"多字段or条件的使用,name:'MongoDB'orx:'203'..."BasicDBListvalues=newBasicDBList();();values.add(newBasicDBObject("name","MongoDB"));values.add(newBasicDBObject("x",203));BasicDBObjectquery=newBasicDBObject();();query.put("$or",values);showDBCursor(con.find(query));

$in 查询

System.out.println("in条件的使用$in...");BasicDBListvalues=newBasicDBList();();for(inti=1;i<=10;i++){values.add(i);}BasicDBObjectquery=newBasicDBObject();();query.put("i",newBasicDBObject("$in",values));showDBCursor(con.find(query));

Order By 排序查询

System.out.println("排序[1=asc,-1=desc]...");showDBCursor(con.find(query).sort(newBasicDBObject("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(newBasicDBObject("i",-1)).skip(0).limit(5);//DESC后取5条数据//findAndRemove()方法,删除查询到的数据,删除后的结果集con.findAndRemove(newBasicDBObject("i",1));showDBCursor(con.find(query));con.findAndRemove(newBasicDBObject("i",newBasicDBObject("$in",values)));//【注意:多个数值无效】showDBCursor(con.find(query));

(not) OR (not in)查询

System.out.println("not,notin条件的使用$not");BasicDBObjectquery=newBasicDBObject();();query.put("i",newBasicDBObject("$not",newBasicDBObject("$in",values)));showDBCursor(con.find(query));

Like模糊查询

System.out.println("like查询的使用...");BasicDBObjectquery=newBasicDBObject();();query.put("type",MonGoUtil.getLikeStr("a"));showDBCursor(con.find(query));

根据字段类型查询

System.out.println("根据数据类型查询,字符类型...");BasicDBObjectquery=newBasicDBObject();();query.put("name",newBasicDBObject("$type",2));//字节showDBCursor(con.find(query));System.out.println("根据数据类型查询,整型...");BasicDBObjectquery=newBasicDBObject();();query.put("i",newBasicDBObject("$type",16));showDBCursor(con.find(query));

返回查询的部分字段

//"查询数据的部分字段,1表示只返回本字段,0表示返回除此字段之外的字段"con.find(newBasicDBObject("name",MonGoUtil.getLikeStr("b")),newBasicDBObject("name",1));

5.java对collection的更新操作

//查询id为300的记录,将cust_Id的值更新为6533615,一定要注意大小写,以及数据//类型,返回值为int表示所影响的记录条数//可以用users.findOne(newBasicDBObject("_id",300));查看下,会发现这条记录//只返回两个字段了,分别为_id,cust_Id,别的字段都删除了。users.update(newBasicDBObject("_id",300),newBasicDBObject("cust_Id","6533615")).getN();//参数3表示数据库不存在是否添加(默认false),参数4表示是否多条修改(false只修改1条)con.update(newBasicDBObject("name","MongoDB"),newBasicDBObject("$set",newBasicDBObject("type","修改后的type"))).getN();con.update(newBasicDBObject("name","MongoDBs"),newBasicDBObject("$set",newBasicDBObject("type","修改后的type")),true,true).getN();

6.java对collection的删除操作

/移除cust_Id为6533615的数据。注意用remove方法不释放磁盘空间,//mongodb只在collection中做了标志,没有正在删除。users.remove(newBasicDBObject("cust_Id","6533615")).getN();//移除id>=1的数据users.remove(newBasicDBObject("_id",newBasicDBObject("$gte",1))).getN();//移除整个collection,drop也不释放磁盘空间users.drop();//根据条件删除文档(数据)BasicDBListrls=newBasicDBList();for(inti=11;i<=20;i++){rls.add(i);}query.put("i",newBasicDBObject("$in",rls));con.remove(query);

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

Binarybinary=(Binary)doc.get("Data");byte[]data=binary.getData();

看完上述内容,你们对Java中怎么操作MongoDB数据库有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。