java環境下:MongoDB的crud操作之Update (一)
阿新 • • 發佈:2018-12-24
最近由於專案的需要,接觸了一下MongoDB 從最開始的cmd環境下操作,到客戶端操作,然後是java語言操作資料庫
下面記錄一下我用java語言對資料庫執行update操作:
package com.zl.mongodb.util; import java.net.UnknownHostException; import java.util.Date; import com.mongodb.BasicDBObject; import com.mongodb.DB; import com.mongodb.DBCollection; import com.mongodb.DBObject; import com.mongodb.MongoClient; import com.mongodb.ServerAddress; import com.mongodb.WriteResult; /** * @author jacky * */ public class MongoDBUtil { private static MongoClient client; /** * 生成MongoClient的客戶端 * @param ip 要連線的主機ip * @param port 連線的埠號 * @return MongoClient */ public static MongoClient getClient(String ip,int port){ try { ServerAddress address = new ServerAddress(ip, port); client = new MongoClient(address); } catch (UnknownHostException e) { e.printStackTrace(); } return client; } /** * 更新操作:如果存在id則插入時間欄位:millseconds,如果不存在則不執行更新操作 * * @param client Mongo客戶端 * @param dbName 資料庫名 * @param collectionName 集合名稱 * @param id id號 * @return */ public static boolean update(MongoClient client,String dbName,String collectionName,int id){ DB db = client.getDB(dbName); DBCollection collection = db.getCollection(collectionName); DBObject query = collection.findOne(new BasicDBObject().append("id", id)); //獲取時間 Date time = (Date) query.get("time"); long random = Math.round(Math.floor(Math.random() * 1000)); WriteResult result = collection.update(query, new BasicDBObject().append("$set", new BasicDBObject().append("millseconds", (time.getTime()+random)+""))); if(result.getN()>0){ return true; } return false; } }
資料庫中初始資料:
執行下面的函式:
public static void testUpdate1(){
String ip = "192.168.2.3";
int port = 27017;
String[] citys = {"beijing","tianjing","wuhan"};
MongoClient client = MongoDBUtil.getClient(ip, port);
DB db = client.getDB("zhanglong_test");
DBCollection collection = db.getCollection("students");
BasicDBObject query = new BasicDBObject("name", "timmy");
/*
* DBCollection物件的update方法過載
* update(query,obj)-->表示update(query,obj,false,false)
* update(query,obj,true,true)
* 第一個引數表示要被替換的物件,第二個引數表示替換的物件,第三個引數:false表示如果沒有查詢到則不執行更新操作,
* 第四個引數表示是否執行批量操作(因為可能滿足query物件的資料有很多)
*/
/*
* 注意:mongodb在執行update語句和sql資料庫在執行update語句的最大不同點是:如果不帶修改器關鍵字(如:$set $unset等)
* 則表示將新的obj物件替換原來的query物件
*/
//執行下面函式,則找到第一條name為timmy將其替換
collection.update(query, new BasicDBObject().append("email", " [email protected]"));
}
資料庫的輸出結果顯示:
如果執行的是
collection.update(obj, new BasicDBObject().append("email", "[email protected]"),false,true);則會把兩條name為timmy的文件都替換成email:"[email protected]"
再次強調:
①第一個boolean型別的引數表示是否在沒有查到指定的query時,新增記錄。有點類似於insertOrUpdate,false表示只更新,不作新增操作;true表示如果查詢不到,就新增記錄
②第二個boolean型別的引數表示是否對查詢出來的資料進行批量修改,false表示只對查到的第一條記錄做修改,true表示對查詢到的所有記錄做修改(
下一篇blog,總結一下對帶修改器關鍵字的操作