2014年12月30日 星期二

MongoDB 教學

近日的NoSQL 議題似乎和傳統關聯式SQL有極大的不同,所以想要好好研究什麼是NoSQL,其中NoSQL中簡易上手的是MongoDB,所以示範MongoDB來如何安裝和儲存資料。

一、MongoDB 限制
l   消耗磁盤空間
l   12個節點的限制
l   不支援32bit
l   差勁的管理工具
l   不可靠的儲存

二、MongoDB 安裝方法

依據你電腦的版本安裝適合的MongoDB



l   Move C:\Program …\MongoDB 2.6 Standard c:\ MongoDB 選擇新路徑
l   Md \data\db    建立MongoDB儲存資料的資料夾
l   Md \data\log   建立MongoDB 儲存啟動服務的日誌檔資料夾
l   c:\ MongoDB\bin\mongod.exe 啟動Mongo server


    注意: 切勿直接關閉喔~~  把它關閉了,就無法連線至mongo DB

l   c:\ MongoDB\bin\mongo.exe 啟動Mongo Client


Ø show dbs 顯示所有資料庫

Ø  use blog 使用資料庫是blog

Ø  顯示所有資料     
db.Post.find()

Ø  新增資料列 
db.Post.insert({
   欄位:“”,
})   儲存資料表Post

Ø  修改資料列
db.Post.update(
{欄位:},修改條件設定
{$set {   欄位: “}})  修改資料

Ø  刪除資料列
db.Post.remove(
{欄位:},修改條件設定
)

三、MongoDB Server 如何開機自動啟動

請用命令提示字元視窗輸入以下指令

建立mongod.cfg

echo logpath=c:\data\log\mongod.log> "C:\ MongoDB \mongod.cfg"

echo dbpath=c:\data\db>> "C:\MongoDB\mongod.cfg"


    建立自動執行的Mongo Server服務
sc.exe create MongoDB binPath= "\"C:\ MongoDB\bin\mongod.exe\" --service --config=\"C:\MongoDB\mongod.cfg\"" DisplayName= "MongoDB " start= "auto"

     啟動服務名稱為:MongoDB
 net start MongoDB


四、MongoDB C# 的結合

安裝nuget 指令:  Install-Package mongocsharpdriver
   
新增mongoDB
string connString = "mongodb://192.168.1.63:27017/blog";
MongoClient _client = new MongoClient(connString);
MongoServer _server = _client.GetServer();
_server.Connect();
// 連接到 db
MongoDatabase db = _server.GetDatabase("blog");
MongoCollection collection = db.GetCollection("Post");
BsonDocument inserData1 = new BsonDocument{
    {"Title","c# "},
    {"Body","this is c#"},
};
collection.Insert(inserData1);
_server.Disconnect();

   取得所有mongoDB資料  
MongoCursor<Post> cursor = collection.FindAllAs<Post>();
var list = cursor.ToList();
radGridView1.DataSource = list.ToArray();

//宣告MongoleDB 對應的物件屬性
public class Post
    {      
        public ObjectId Id  //MongoDB 有預設id 類別為objectid
        {
            get;
            set;
        }
        public string Title
        {
            get;
            set;
        }
        public string Body
        {
            get;
            set;
        }
        public int CharCount
        {
            get;
            set;
        }
    }

刪除mongoDB資料
  //刪除資料
    var query = Query<Post>.EQ(p => p.Title, "c#");
    collection.Remove(query);

修改MongoDB 資料
  //修改資料
    var query = Query<Post>.EQ(p => p.Title, "c# ");
    var update = Update<Post>.Set(p => p.Title, "c# update");
    collection.Update(query, update);
or
   ObjectId objctID= new ObjectId("54a3699d0e925b162c4e2fdd");  //Id
    collection.Save(new Post()
    {
       Id = objctID,
       Title="c# ",
       Body="update c# ''",
       CharCount=10,
   });

     結論:mongoDB 提供可易擴充的欄位結構,但根據有經驗的人說MongoDB無法提供可靠性儲存資料,作者只是簡單提供MongoDB教學,還請各位想嘗試MongoDB的開發者先收集mongoDB的優缺點,再仔細想想自已的專案是否適用mongoDB

五、文獻參考


沒有留言:

張貼留言