1. 程式人生 > >java環境下:MongoDB的crud操作之Update (一)

java環境下:MongoDB的crud操作之Update (一)

最近由於專案的需要,接觸了一下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表示對查詢到的所有記錄做修改(大笑

好吧,記錄是在sql資料庫中的說法,mongodb中稱之為文件,實際上一個意思)

下一篇blog,總結一下對帶修改器關鍵字的操作