Java操作MongoDB数据库方法详解

  • A+
所属分类:MongoDB

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

您可能感兴致的文章:

java操作mongodb根基(查询 排序 输出list)MongoDB快速入门条记(八)之MongoDB的java驱动操作代码讲授java查询mongodb中的objectid示例MongoDB支撑的java数据类型和测试例子Java操作MongoDB数据库示例分享Java操作MongoDB隐约查询和分页查询java操作mongodb实现CURD功效实例java实现mongodb的数据库衔接池MongoDB系列教程(六):java操作mongodb实例

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: