顯示具有 MongoDB 標籤的文章。 顯示所有文章
顯示具有 MongoDB 標籤的文章。 顯示所有文章

2015年5月6日 星期三

ubuntu mongoDB 3.0 install

  1. sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
  2. echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list
  3. sudo apt-get update
  4. 安裝特定版本mongoDB

    sudo apt-get install -y mongodb-org=3.0.2 mongodb-org-server=3.0.2 mongodb-org-shell=3.0.2 mongodb-org-mongos=3.0.2 mongodb-org-tools=3.0.2
  5. 防止mongodb被 apt-get 升級。

    echo "mongodb-org hold" | sudo dpkg --set-selections
    echo "mongodb-org-server hold" | sudo dpkg --set-selections
    echo "mongodb-org-shell hold" | sudo dpkg --set-selections
    echo "mongodb-org-mongos hold" | sudo dpkg --set-selections
    echo "mongodb-org-tools hold" | sudo dpkg --set-selections

  6. edit mongodb config

    sudo vim /etc/mongod.conf

    #這行是控管mongodb可以來訪的 IP,如果在aws上因為控管可由aws設定,所以可以註解掉,或是也可以用逗號區隔加入允許的ip,例如如 127.0.0.1,10.0.122.10
    bind_ip = 127.0.0.1

  7.  start mongo

    sudo mongod --fork --config /etc/mongod.conf
    # --fork 背景執行  --config 載入設定檔
  8. 進入mongo shell
    mongo

  9. 離開 mongo shell
    exit
  10. 查看mongodb 運行

    ps aux | grep mongo
  11. stop mongo
    進入mongodb shell

    a. mongo
    b. use admin
    c. db.shutdownServer()
    d. exit
參考:
  • http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/

2014年7月20日 星期日

Java MongoDB find _id


搜尋條件必須用 ObjectID(  ),直接用String 會找不著。

BasicDBObject query = new BasicDBObject();
query.put("_id", new ObjectId(roleID));



2014年7月17日 星期四

Java Mongo Drivers Normal Authentication 一般驗證

OS : win7
mongoDB  :   2.6
MongoDB Drivers :  2.12.2
Language:Java


package global.db;


import java.net.UnknownHostException;

import java.util.Arrays;

import javassist.bytecode.stackmap.TypeData.ClassName;


import org.apache.log4j.Logger;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.annotation.Scope;

import com.mongodb.DB;

import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;

/**

 * @author hua
 * 處理 mongoDB 基礎連線建立 
 */
@Configuration
@Scope(BeanDefinition.SCOPE_SINGLETON)
public class MongoConnection {

private static Logger logger = Logger.getLogger(ClassName.class);

@Value("${mongo.host}")
private String host;

@Value("${mongo.port}")
private int port;

@Value("${mongo.dbName}")
private String dbName;

@Value("${mongo.user}")
private String user;

@Value("${mongo.pwd}")
private String pwd;

private MongoClient mongoClient;

public MongoConnection() throws UnknownHostException {
super();
}

/**

* 建立連線
*/
private void buildConnection()throws UnknownHostException{
try {
MongoCredential credential = MongoCredential.createMongoCRCredential(this.user, this.dbName, this.pwd.toCharArray());
MongoClientOptions options = getOption();
ServerAddress address = new ServerAddress(this.host, this.port);
mongoClient = new MongoClient(address, Arrays.asList(credential), options);
logger.info("--------------------MongoDB 驗證成功");
} catch (UnknownHostException e) {
logger.error("MongoDB 建立連線失敗!");
if(mongoClient != null){
mongoClient.close();
}
throw e;
}
}
//線程等待數量  * 主機最大連線數  = pool 數量
protected MongoClientOptions getOption(){
return new MongoClientOptions.Builder()
       .threadsAllowedToBlockForConnectionMultiplier(300) //線程等待的數量
       .connectionsPerHost(10) //主機最大連線數
       .connectTimeout(5000)
       .build();
}

/** 取得DB操作物件
* @return
* @throws UnknownHostException
*/
public DB getDB() throws UnknownHostException {
synchronized (this) {
if(mongoClient == null){
buildConnection();
}
}
return mongoClient.getDB(this.dbName);
}
}



Note :
  •  mongo 現在版本,建議使用MongoClientOptions 而不要再使用MongoOptions。
參考文件:



MongoDB MongoClient 與 Mongo

OS : win7
mongoDB  :   2.6
MongoDB Drivers :  2.12.2
Language:Java


  • MongoClient 與 Mongo 是mongoDB Driver  是連線管理物件,具有連線池功用。
  • Mongo 目前 Drivers API 有提到,請不要再使用Mongo,而因改用MongoClient來建立連線。

    此段引用mongoDB官方API 文件

    Mongo(MongoURI uri)
    Deprecated.

    可以看見,文件告知改用MongoClient吧。
  • MongoClient 繼承自  Mongo。

參考:

2014年7月11日 星期五

maven學習 九 : 利用MVNRepository網站,加入mongoDB

Step 1. 連結到  MVN Repository 官網

Step 2. 搜尋欄位中填入  mongodb






Step3 .  點擊  MongoDB Java Driver 項目

MongoDB Java Driver 
The MongoDB Java driver
org.mongodb » mongo-java-driver


Step4.  點擊你想要的版本







 NOTE:



Step 5.  複製 dependency 內容至 專案的 pom.xml 















 pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.tw.ocean</groupId>
  <artifactId>ProjectD</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>

  <!-- 依賴,就是程式中會用到的jar -->
  <dependencies>  
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>2.12.2</version>
</dependency>
  </dependencies>

</project>


Step 6 .  執行 mvn install

  • 方法一: 在命令列中  mvn  install
  • 方法二: 在eclipse 中,對專案項目,
                      滑鼠右鍵  >  Run AS  >    Maven Install
如此就會將 mongoDB Driver 下載至本機的Repository資料夾中,
並且會自動引入專案關連。



















參考資料:



關於 mongoDB 版本號 (MongoDB Version Nmber)

mongoDB 版本號
example  : 2.4.1

2.4 : 代表版本別
     
4   : 這個位數,偶數代表 「穩定版本」,奇數代表 「開發中,版本」


1   : 這個位數,表示修正版號,0為起始號。


example :


  • 2.0.0 穩定版
  • 2.0.1 修正版
  • 2.1.0 開發中版本,用於測試,不穩定。
  • 2.2.0 穩定版本,是2.1.x 系列的最後之作。

參考說明:


2014年7月8日 星期二

mongoDB使用config檔,與捷徑參數

作業系統:windows7
mongodb:2.6.3


1.   請先至mongoDB官網下載windows 64版。  下載頁 。

2.  下載完後執行安裝 。     
  • 如果下載是msi就執行安裝,預設會安裝在
    C:\Program Files\MongoDB 2.6 Standard\bin
  • 如果下載是zip解開就可以。
3.  建立  .conf  檔在你想要的路徑下
  • 例如:C:\Users\hua\mongodb

2010年10月8日 星期五

個人學習MongoDB後,對於document的認知

(MongoDB官方網站文件也有提到,但文件較分散)

  • A document is the basic unit of data for MongoDB, roughly equivalent to a row in a relational database management system (but much more expressive).
  • Similarly, a collection can be thought of as the schema-free equivalent of a table.
  • A single instance of MongoDB can host multiple independent databases, each of which can have its own collections and permissions.
  • MongoDB comes with a simple but powerful JavaScript shell, which is useful for the administration of MongoDB instances and data manipulation.
  • Every document has a special key, "_id", that is unique across the document’s collection.


collection很好理解但document就字面上有點難理解,但看完Java Driver運作方式後,對document我的認知如下:

MongoDB的document長像是JSON的格式,document在RDBMS上如同是一個row。 


{
    "name" : "MongoDB",
    "type" : "database",
    "count" : 1,
    "info" : { x : 203, y : 102 }
}



在mongoDB java Driver使用上要寫入如上JSON格式資料的語法如下:


//建立最外層key:value,此時還不是完整的parent document
BasicDBObject doc = new BasicDBObject();
doc.put("name", "MongoDB");
doc.put("type", "database"); doc.put("count", 1);

//建立info的sub document
BasicDBObject info = new BasicDBObject();
 info.put("x", 203);
 info.put("y", 102);

//將sub document寫入doc使其成為完整的parent document.
doc.put("info", info);

//將這個完整的parent document插入到collection,這個collection類似RDBMS的table.
coll.insert(doc);

由程式邏輯來理解
我認為由最外層來看這個結構是一個parent document
 {
    "name" : "MongoDB",
    "type" : "database",
    "count" : 1,
    "info" : { x : 203, y : 102 }
 }


//而info的value也是一個document,就是parent document裡再包含了一個sub document.

 { x : 203, y : 102 }



因此整個JSON格式就可以看成是RDBMS裡的一個row,對於想從mongoDB拿資料的程式來說這一個最外層就是一個document,而對於mongoDB自己內部來說內層那個info也是一個document。

從程式邏輯來看能理解MongoDB的資料結構了,但我無法很明白的來敘述這種關係,並且理解也可能有誤解,不過當由程式直接操作來看,document到底是什麼就變得不是那麼重要,有點張無忌學太極拳、劍,最後無招勝有招。

2010年10月7日 星期四

MnogoDB JAVA Driver配置

MongoDB Driver官方頁面
Java Driver下載頁面
本文撰寫時Java Driver最新版本為 Version2.1
Step1.下載MongoDB JAVA Driver

@ubuntu:~/Downloads$ wget http://github.com/downloads/mongodb/mongo-java-driver/mongo-2.1.jar


Step2.建立目錄mongoDriver
於/opt底下建立一個目錄以放置mongo-2.1.jar

@ubuntu:/opt$ sudo mkdir mongoDriver


Step3.將mongo-2.1.jar移至/opt/mongoDriver底下

@ubuntu:~/Downloads$ sudo mv mongo-2.1.jar /opt/mongoDriver/


Step4.開啟Eclipse,開啟一個Java Project
Step5.Libraries中Add External JARs將mongo-2.1.jar加入

//待續

2010年10月5日 星期二

mongoDB與MySQL 指令比較

閱讀紀錄
MySQL Program → Mongo Program
  • mysqld  → mongod (啟動DB)
  • mysql    → mongo    (DB連線,進入 Shell操作模式)

MySQL Statement → Mongo Statement
插入 
  • INSERT INTO users VALUES(2,3) →
    db.users.insert({a:2,b:3})

搜尋全部
  • SELECT * FROM users →
    db.users.find()
SELECT0
  • SELECT a,b FROM users →
    db.users.find({},{a:2,b:3})
SELECT1
  • SELECT * FROM users WHERE age=30 →
    db.users.find({age:30})
SELECT2
  • SELECT a,b FROM users WHERE age=30 →
    db.users.find({age:33},{a:2,b:3})


SELECT3
  • SELECT * FROM users WHERE age=30 ORDER BY name → db.users.find({age:33}).sort({name:1})
SELECT4
  • SELECT * FROM users WHERE age>30 →
    db.users.find({'age':{$gt:30}})
SELECT5
  • SELECT * FROM users WHERE age<30 →
    db.users.find({'age':{&lt:30}})
SELECT6
  • SELECT * FROM users ORDER BY name DESC → db.users.find().sort({name:-1})
建立索引
  • CREATE INDEX myindexname ON users(name) → db.users.ensureIndex({name:1})
SELECT命令7
  • SELECT * FROM users WHERE a=1 and b='q' → db.users.find({a:1,b:'q'})
SELECT命令8
  • SELECT * FROM users LIMIT 10 SKIP 20 → db.users.find.limit(10).skip(20)
SELECT命令9
  • SELECT * FROM users LIMIT 1 → db.users.findOne()
SELECT命令10
  • EXPLAIN SELECT * FROM users WHERE z=3 → db.users.find({z:3}).explain()
SELECT命令11
  • SELECT DISTINCT last_name FROM users → db.users.distinct('last_name')
SELECT命令12
  • SELECT COUNT(*y) FROM users → db.users.count()
SELECT命令13
  • SELECT COUNT(*) FROM users where AGE > 30 → db.users.find({age:{'&gt':30}}).count()
SELECT命令14
  • SELECT COUNT(AGE) FROM users → db.users.find({age:{'$exists':true}}).count()
SELECT命令15
  • UPDATE users SET a=1 WHERE b='q' → db.users.update({b:'q'},{$set:{a:1}},false,true)

MongoDB Shell 下的 基本操作指令

(文章來自mongoDB mongo - The interactive章節)
//以下命令都是進入mongoDB Shell環境下使用
//進入Shell用的Linux命令 ./bin/mongo


Special Command Helpers
Non-javascript convenience macros:
Show help
顯示最上層的幫助文件
  • >help
Show help on db methods
顯示(資料庫)db系列命令的幫助文件
  • >db.help()
Show help on collection methods
顯示(集合)myColl系列命令的幫助文件
  • >db.myColl.help()
Print a list of all databases on this server
查詢mongoDB上所有的資料庫
  • >show dbs



Set the db variable to represent usage of dbname on the server
切換資料庫
  • >use [db_name]
Print a list of all collections for current database
顯示所有的collections (mongoDB的collection 類似 MySQL的table)
  • >show collections
Print a list of users for current database
列出當前資料庫用戶
  • >show users
Print most recent profiling operations that took >= 1ms
列出最近的操作?
  • >show profile
Basic Shell Javascript Operations

//未完

MongoDB Starting the Shell

啟動mongodb的Shell環境
  • ./bin/mongo

connects to the [database] on your local machine.
連接本地端機器上的database。
  • ./mongo [database Name]
  • ./mongo testdb


connects to the [database] on 192.168.11.3

指定連接特定位址上的database
  • ./mongo [IP Address]/[database]
  • ./mongo 192.168.11.3/testdb


connects to the foo database on [domainName]
指定連接domainName上的database。
  • ./mongo [domainName]/[database]
  • ./mongo dbserver.mydomain.com/testdb

connects to the [database] on [IP Address] on [port number]
指定IP位址與使用Port number。
  • ./mongo [IP Address]:[Port Number]/[database]
  • ./mongo 192.168.11.3:7000/testbase

2010年10月4日 星期一

Linux配置mongoDB

MongoDB下載頁面
Step1.下載mongoDB
:~Downloads$ wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-1.6.3.tgz

Step2.解壓
~Downloads$ tar xzf mongodb-linux-x86_64-1.6.3.tgzls

Step3.更改目錄名稱
~Downloads$ mv mongodb-linux-x86_64-1.6.3 mongodb

Step4.移動資料夾至/opt
~Downloads$sudo mv mongodb /opt

Step5.建立給予mondoDB使用的資料夾
/$ sudo mkdir -p /data/db/
//mongoDB預設使用資料庫路徑為 /data/db
//linux習慣會將常變動資料置放於 /var下,因此可以將data/db移至/var下使用。
Step6.修改資料夾權限
sudo chown [檔案擁有者] [目標對象]
sudo chown jeffrey /data/db
Step7.執行MongoDB
//如此會啟動mongoDB,但需要使用另外一使用者環境,使用不同使用者登入才能操作mongoDB
./opt/mongod --dbpath=/data/db


//如此可在原本使用者環境中開啟mongoDB
 ./mongod --fork  --dbpath=/data/db --logpath=/opt/mongodb/log/mongodb.log --logappend




查詢MongoDB是否運行
  • ps -ef|greap grep mongod
查詢mongodb的Port Number是否運作
  • netstat -an -t|greap grep 28017
mongoDB預設Port是28017,再啟動時可以使用--port來指定使用port