Java操作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区分⼤⼩写,程序中⼀定要注意
//安全认证java代码返回true表⽰通过,false表⽰没通过不能进⾏操作
db.authenticate("userName", "password".toCharArray());
if(db.authenticate("admin", "123".toCharArray())){
System.out.println("连接mongodb成功...");
} else{
System.out.println("连接mongodb失败...");
}
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");
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.("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();
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.());
}
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("列出"+ Name() +"集合(表)的所有⽂档...");
showDBCursor(con.find());
查询JAVA对象
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));
单字段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条数据
drop table if exists admin
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));

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。