最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java操作MongoDB數(shù)據(jù)庫方法詳解

 更新時間:2018年01月24日 08:54:24   作者:文藝狼  
本文給大家分享的是使用Java操作MongoDB的一些基本方法,包含多種數(shù)據(jù)庫的連接方式,增刪改查等方法,非常的實用,有需要的小伙伴可以參考下

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相當于數(shù)據(jù)庫名

DBAddress left = new DBAddress("ip:port/dataBaseName");

DBAddress right = new DBAddress("ip:port/dataBaseName ");

//若一個mongodb出現(xiàn)問題,會自動連另外一臺

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的數(shù)據(jù)庫名

1. 獲取mongodb的db(數(shù)據(jù)庫)

//dataBaseName相當于關系數(shù)據(jù)庫里的數(shù)據(jù)庫名,mongodb中若沒有該

//數(shù)據(jù)庫名也不會報錯,默認mongodb會建立這個數(shù)據(jù)庫名,為空。

DB db = mg.getDB(dataBaseName);

注意:mongodb區(qū)分大小寫,程序中一定要注意

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

//參數(shù)tableName相當于關系數(shù)據(jù)庫里的表名,
//若mongodb中沒有該tableName,默認會創(chuàng)建該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中也像傳統(tǒng)的關系數(shù)據(jù)庫里表一樣,有主鍵(_id)概念,用來唯一標識他們。當用戶往collection中插入一條新記錄的時候,如果沒有指定_id屬性,那么mongodb會自動生成一個ObjectId類型的值,保存為_id的值。

  _id的值可以為任何類型,除了數(shù)組,在實際應用中,鼓勵用戶自己定義_id值,但是要保證他的唯一性。

  傳統(tǒng)的數(shù)據(jù)庫中,通常用一個遞增的序列來提供主鍵,在Mongodb中用ObjectId來代替,我們可以通過如下的方法來得到主鍵。

public class Tools {
/**
 * 實現(xiàn)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); //插入對象
//特殊添加
// 添加多個特殊數(shù)據(jù)(模式自由)
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的數(shù)據(jù),并且刪除

users.findAndRemove(new BasicDBObject("_id", 30000));

findAndModify介紹

users.findAndModify(

    new BasicDBObject("_id", 28), //查詢_id=28的數(shù)據(jù)

    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 //如果沒有查詢到該數(shù)據(jù)是否插collection true入庫,false不入

));

查詢所有數(shù)據(jù)

//列出所有文檔

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

 單一條件查詢(數(shù)字)

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

 根據(jù)列名查詢

System.out.println("查詢有'type'字段的數(shù)據(jù)..."); // 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)));

分頁查詢

// "分頁查詢的使用,總數(shù)據(jù)量:"+con.find(query).count()

con.find(query).limit(1); // 只取第1條數(shù)據(jù)

con.find(query).skip(1).limit(1); // 從1開始取1條數(shù)據(jù),下標從0開始

con.find(query).sort(new BasicDBObject("i", -1)).skip(0).limit(5); // DESC后取5條數(shù)據(jù)

//findAndRemove()方法,刪除查詢到的數(shù)據(jù),刪除后的結果集

con.findAndRemove(new BasicDBObject("i", 1));

showDBCursor(con.find(query));

con.findAndRemove(new BasicDBObject("i", new BasicDBObject("$in",  values))); //【注意:多個數(shù)值無效】

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

 根據(jù)字段類型查詢

System.out.println("根據(jù)數(shù)據(jù)類型查詢,字符類型...");

BasicDBObject query = new BasicDBObject();();

query.put("name", new BasicDBObject("$type", 2)); //字節(jié)

showDBCursor(con.find(query));

System.out.println("根據(jù)數(shù)據(jù)類型查詢,整型...");

BasicDBObject query = new BasicDBObject();();

query.put("i", new BasicDBObject("$type", 16));

showDBCursor(con.find(query));

  返回查詢的部分字段

//"查詢數(shù)據(jù)的部分字段,1表示只返回本字段,0表示返回除此字段之外的字段"

con.find(new BasicDBObject("name", MonGoUtil.getLikeStr("b")), new BasicDBObject("name", 1));


5.java對collection的更新操作

//查詢id為300的記錄,將cust_Id的值更新為6533615,一定要注意大小寫,以及數(shù)據(jù)//類型,返回值為int表示所影響的記錄條數(shù)

//可以用users.findOne(new BasicDBObject("_id",300));查看下,會發(fā)現(xiàn)這條記錄//只返回兩個字段了,分別為_id,cust_Id,別的字段都刪除了。

users.update(new BasicDBObject("_id",300), new BasicDBObject ("cust_Id","6533615")).getN();

// 參數(shù)3表示數(shù)據(jù)庫不存在是否添加(默認false),參數(shù)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的數(shù)據(jù)。注意 用remove方法不釋放磁盤空間,

//mongodb只在collection中做了標志,沒有正在刪除。

users.remove(new BasicDBObject("cust_Id","6533615")).getN();

//移除id>=1的數(shù)據(jù)

users.remove(newBasicDBObject("_id",new BasicDBObject("$gte",1))).getN();

//移除整個collection,drop也不釋放磁盤空間

users.drop();

// 根據(jù)條件刪除文檔(數(shù)據(jù))

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類型數(shù)據(jù)

 Binary binary = (Binary) doc.get("Data");

 byte[] data=binary.getData();

相關文章

  • mongodb 命令行下及php中insert數(shù)據(jù)詳解

    mongodb 命令行下及php中insert數(shù)據(jù)詳解

    這篇文章主要介紹了mongodb 命令行下及php中insert數(shù)據(jù)詳解,需要的朋友可以參考下
    2014-07-07
  • SpringBoot?整合mongoDB并自定義連接池的示例代碼

    SpringBoot?整合mongoDB并自定義連接池的示例代碼

    這篇文章主要介紹了SpringBoot?整合mongoDB并自定義連接池?,整合mongoDB的目的就是想用它給我們提供的mongoTemplate,它可以很容易的操作mongoDB數(shù)據(jù)庫,對整合過程及實例代碼感興趣的朋友跟隨小編一起看看吧
    2022-02-02
  • mongodb中使用distinct去重的簡單方法

    mongodb中使用distinct去重的簡單方法

    怎么在mongodb中實現(xiàn)類似于SQL中distinct的功能,查詢某一個字段所有的值,今天我們就來探討下這個問題。
    2015-05-05
  • mongodb增量備份腳本的實現(xiàn)和原理詳解

    mongodb增量備份腳本的實現(xiàn)和原理詳解

    MongoDB本身不支持增量備份,所以這里介紹我找到的方法,下面這篇文章主要給大家介紹了關于mongodb增量備份腳本的實現(xiàn)和原理的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2018-09-09
  • MongoDB學習之Text Search文本搜索功能

    MongoDB學習之Text Search文本搜索功能

    這篇文章主要給大家介紹了MongoDB之Text Search文本搜索功能的相關資料,文中給出了詳細的示例代碼供大家參考學習,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-05-05
  • 在Mac OS上安裝使用MongoDB的教程

    在Mac OS上安裝使用MongoDB的教程

    這篇文章主要介紹了在Mac OS上安裝使用MongoDB的教程,包括MongoDB基本的命令與數(shù)據(jù)類型的講解,如果在開發(fā)環(huán)境中調(diào)試的話相當推薦閱讀本文,需要的朋友可以參考下
    2016-02-02
  • 詳解清除MongoDB所占用的多余的磁盤空間的方法

    詳解清除MongoDB所占用的多余的磁盤空間的方法

    MongoDB不會自動進行垃圾文件清理,不過我們可以借助自帶的repairDatabase等功能來實現(xiàn),下面我們就來詳解清除MongoDB所占用的多余的磁盤空間的方法,附帶一個如何格式化mongo shell的輸出的小技巧:
    2016-06-06
  • PHP  MongoDB GridFS 存儲文件的方法詳解

    PHP MongoDB GridFS 存儲文件的方法詳解

    這篇文章主要介紹了PHP MongoDB GridFS 存儲文件的方法詳解的相關資料,需要的朋友可以參考下
    2016-10-10
  • 關于MongoDB數(shù)據(jù)庫核心概念

    關于MongoDB數(shù)據(jù)庫核心概念

    這篇文章主要介紹了關于MongoDB數(shù)據(jù)庫核心概念,MongoDB由C++語言編寫,是一個基于分布式文件存儲的開源數(shù)據(jù)庫系統(tǒng),需要的朋友可以參考下
    2023-04-04
  • mongodb實現(xiàn)數(shù)組對象求和方法實例

    mongodb實現(xiàn)數(shù)組對象求和方法實例

    這篇文章主要給大家介紹了關于mongodb實現(xiàn)數(shù)組對象求和的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-01-01

最新評論

永胜县| 泰兴市| 马公市| 镇赉县| 淳安县| 资阳市| 开平市| 东光县| 文山县| 晋江市| 宜君县| 远安县| 五原县| 卢氏县| 碌曲县| 阜南县| 义马市| 西安市| 大厂| 洛宁县| 新营市| 饶河县| 漠河县| 永吉县| 开化县| 松原市| 勃利县| 临漳县| 涞源县| 神木县| 普格县| 英山县| 图们市| 东山县| 嘉善县| 东光县| 株洲市| 和平区| 金山区| 昭觉县| 中宁县|