本文使用的環境是:win7_64+Eclipse+maven
一、準備工作
下載java驅動包
驅動包:http://mvnrepository.com/artifact/org.mongodb/mongo-java-driver
mongoDB下載:http://www.mongodb.org/
線上api:http://docs.mongodb.org/manual/applications/drivers/
二、安裝Mongo
1.windows下安裝方式:
安裝Mongo資料庫:
第一步:下載安裝包:如果是win系統,注意是64位還是32位版本的,請選擇正確的版本。
第二步:建立目錄“D:\MongoDB”,解壓下載到的安裝包,找到bin目錄下面全部.exe檔案,拷貝到剛建立的目錄下。
第三步:在“D:\MongoDB”目錄下建立“data”檔案夾,它將會作為資料存放的根資料夾。
配置Mongo服務端:
開啟CMD視窗,按照如下方式輸入命令:
> d:
> cd D:\MongoDB
> mongod --dbpath D:\MongoDB\data
啟動成功後從瀏覽器訪問:http://localhost:27017/
標明windows下的mongodb已經啟動成功;
2.linux安裝方式:
下載後解壓確保資料庫目錄大小剩餘空間在3G以上;
這裡採用設定檔方式啟動:在mongodb的根目錄建立一個名為:mongodb.conf的檔案,內容如下:
#fork=true #以守護進程的方式運行,建立伺服器處理序##master=true #單主從配置時設為主伺服器##salve=true ##單主從配置時設為從伺服器#replSet=blort #設定富本集的名字#shardsvr=true #設定是否分區#repairpath = /mongodb2.6.3/repair #pidfilepath = /mongodb2.6.3/mongodb.pid #sysinfo = true #verbose = true #cpu = true #Network and security set #Management #nohttpinterface = true #rest = true #syncdelay = 5#Directory and relavent set dbpath = /mongodb2.6.3/data #資料庫路徑logpath = /mongodb2.6.3/logs/mongodb.log #日誌輸出檔案路徑logappend = true #日誌輸出方式directoryperdb = true noauth = true port = 8888 #連接埠號碼maxConns = 1024 fork = true quota = true quotaFiles = 1024 nssize = 16
啟動方式如下:/mongodb2.6.3/bin/mongod -f /mongodb2.6.3/mongodb.conf
記得開啟linux的訪問連接埠:
#vi /etc/sysconfig/iptables
yy複製一行
p粘貼
修改連接埠
#service iptables restart
設定開機自啟動
#echo /mongodb2.6.3/bin/mongod -f /mongodb2.6.3/mongodb.config >>/etc/rc.local
資料庫啟動完成,接下來是建立資料庫和集合:
mongo --port 8888
> show dbs
admin (empty)
local 0.078GB
> use admin(切換系統管理使用者)
switched to db admin
> db.mymongo(建立資料庫)
admin.mymongo
> db.addUser("root","root")(添加使用者)
WARNING: The 'addUser' shell helper is DEPRECATED. Please use 'createUser' instead
Successfully added user: { "user" : "root", "roles" : [ "root" ] }
> db.auth("root","root")(添加登陸使用者)
1
> db.createCollection("t_users")(添加表)
{ "ok" : 1 }
> show collections(顯示表)
system.indexes
system.users
system.version
t_users
> db.t_users.save({age:21})(儲存資料)
WriteResult({ "nInserted" : 1 })
> db.t_users.find()(查詢所有資料)
{ "_id" : ObjectId("53a2e45e4a674863b4ac5398"), "age" : 21 }
mongodb 刪除資料庫
use mymongo;
db.dropDatabase();
mongodb刪除表
db.t_users.drop();
MongoDB服務停止:
在linux下大家停止很多服務都喜歡直接kill -9 PID,但是對於MongoDB如果執行了kill -9 PID,在下次啟動時可能提示錯誤,導致服務無法啟動,這個時候可以通過執行:
Java代碼
- rm -f /app/hadoop/db/mongod.lock
也即刪除指定資料目錄下的mongod.lock檔案即可。
正常停止方法:
kill -2 PID
或者
Java代碼
- ./mongo -host ip:port
先串連需要停止的服務,然後:
Java代碼
- >use admin
- >db.shutdownServer();
這樣也可以正常停止服務。
三、Java操作MongoDB樣本
1、 建立Test.java,完成簡單的mongoDB資料庫操作
try {Mongo mg = new MongoClient("192.168.186.129", 8888);DB db = mg.getDB("mymongo");// 用於判斷使用者登入//if(!db.authenticate("sdap", "sdap123".toCharArray())){//方法已經不建議使用//}Set<String> collectionNames = db.getCollectionNames();for (String string : collectionNames) {System.out.println(string);}DBCollection collection2 = db.getCollection("t_users2");collection2 = db.getCollection("t_users2");CarPasitionObj u = new CarPasitionObj();u.setLa(1231d);u.setLo(42342d);u.setPn("京1aaa");u.setTp(12);String obj2Json = JsonUtils.getSingletonInstance().obj2Json(u);BasicDBObject dbObject1=new BasicDBObject();dbObject1.put("key", "123131");dbObject1.put("value", obj2Json);collection2.save(dbObject1);<pre name="code" class="java">BasicDBObject dbObject=new BasicDBObject();dbObject.put("key", "123131");DBCursor find = collection2.find(dbObject);while (find.hasNext()) {DBObject next = find.next();String key = (String)next.get("key");String json = (String)next.get("value");System.out.println(key);CarPasitionObj formJson = JsonUtils.getSingletonInstance().formJson(json, CarPasitionObj.class);System.out.println(formJson.getPn());}} catch (UnknownHostException e) { e.printStackTrace(); }
下面貼上我自己的mongodb的工具類:
/** * Project Name:main * File Name:MongodbCacheManagerUtil.java * Package Name:com.hdsx.taxi.driver.cq.cache * Date:2014年4月9日下午12:49:55 * Copyright (c) 2014, sid Jenkins All Rights Reserved. * **/package com.hdsx.taxi.driver.cq.mongodb;import java.net.UnknownHostException;import java.util.ArrayList;import java.util.List;import org.apache.log4j.Logger;import com.hdsx.taxi.driver.cq.module.InitServletModule;import com.hdsx.taxi.driver.cq.tcp.util.JsonUtils;import com.mongodb.BasicDBObject;import com.mongodb.DB;import com.mongodb.DBCollection;import com.mongodb.DBCursor;import com.mongodb.DBObject;import com.mongodb.Mongo;import com.mongodb.MongoClient;/** * ClassName:MongodbCacheManagerUtil * Function: TODO ADD FUNCTION. * Reason: TODO ADD REASON. * Date: 2014年4月9日 下午12:49:55 * @author sid * @see */public class MongodbManagerUtil {private static final Logger logger = Logger.getLogger(MongodbManagerUtil.class);private Mongo mg = null;private DB db = null;private volatile static MongodbManagerUtil singleton = null;public static final String KEY = "key";public static final String VALUE = "value";public static MongodbManagerUtil getSingletonInstance() {if (singleton == null) {synchronized (MongodbManagerUtil.class) {if (singleton == null) {singleton = new MongodbManagerUtil();}}singleton = new MongodbManagerUtil();}return singleton;}private MongodbManagerUtil() {if (logger.isDebugEnabled()) {logger.debug("MongodbCacheManagerUtil() - start "); //$NON-NLS-1$}try {mg = new MongoClient("192.168.186.129", 8888);db = mg.getDB("mymongo");} catch (UnknownHostException e) {e.printStackTrace();}if (logger.isDebugEnabled()) {logger.debug("MongodbCacheManagerUtil() - end"); //$NON-NLS-1$}}/** * * getCache:(擷取緩衝對象). * * @author sid * @param name * @return */public DBCollection getCache(String name){return this.db.getCollection(name);}/** * * put:(在指定緩衝對象中加入需要緩衝的對象). * * @author sid * @param cacheName * @param key * @param value */ public void put(String cacheName, String key, Object value) { DBCollection cache = this.db.getCollection(cacheName);String obj2Json = JsonUtils.getSingletonInstance().obj2Json(value);BasicDBObject obj = new BasicDBObject();obj.put(MongodbManagerUtil.KEY, key);obj.put(MongodbManagerUtil.VALUE, obj2Json); BasicDBObject basicDBObject = new BasicDBObject(MongodbManagerUtil.KEY, key); int size = cache.find(basicDBObject).count(); if (size==0) { cache.save(obj);}else{ cache.update(basicDBObject, obj);} } /** * * get:(根據key從指定緩衝對象中擷取對象). * * @author sid * @param cacheName * @param key * @return */ public <T> T get(String cacheName, String key, Class<T> classOfT) { DBCollection cache = this.db.getCollection(cacheName); List<DBObject> array = cache.find(new BasicDBObject(MongodbManagerUtil.KEY, key)).toArray(); if (array == null||array.size()==0) {return null;} DBObject dbObject = array.get(0); String json = (String)dbObject.get(MongodbManagerUtil.VALUE); return JsonUtils.getSingletonInstance().formJson(json, classOfT); } /** * * remove:(從指定緩衝對象中清除對象). * * @author sid * @param cacheName * @param key */ public void remove(String cacheName, String key) { DBCollection cache = this.db.getCollection(cacheName); cache.remove(new BasicDBObject(MongodbManagerUtil.KEY,key)); } /** * * getKeys:(擷取keys列表). * * @author sid * @param cacheName * @return */public List<String> getKeys(String cacheName){List<String> list = new ArrayList<String>(); DBCollection cache = this.db.getCollection(cacheName); DBCursor find = cache.find(); while (find.hasNext()) { DBObject next = find.next(); String key = (String) next.get(MongodbManagerUtil.KEY); list.add(key);} return list; }/** * * containsKey:(判斷訊息是否存在). * * @author sid * @param cacheName * @param key * @return */public Boolean containsKey(String cacheName,String key){ DBCollection cache = this.db.getCollection(cacheName); BasicDBObject basicDBObject = new BasicDBObject(MongodbManagerUtil.KEY, key); int size = cache.find(basicDBObject).count(); if (size==0) { return false;}else{return true;}}}
除了save、insert、update;mongodb還有remove等操作
其中find方法可以指定查詢條件:
大於等於:$gte
小於等於:$lte
不等於:$ne
demo:users.find(new BasicDBObject("age", new BasicDBObject("$gte", 24)))