生活随笔
收集整理的這篇文章主要介紹了
【转载】MongoDB基本操作
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
園子里已經(jīng)有不少朋友發(fā)過MongoDB的帖子,但是都比較高端,我在這里就寫下比較基礎(chǔ)的應(yīng)用,算是MongoDB的第一次接觸有所了解。呵呵。我們?nèi)ongodb.org看一看。首頁(yè)赫然寫著 The Best Features of Document Databases,Key-Value Stores,and RDBMSes。意思是最牛逼的文檔數(shù)據(jù)庫(kù),鍵值對(duì)的存儲(chǔ)并且是RDBMS(relational database management system關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng))。
下面解釋說MongoDB縮小了KV存儲(chǔ)和傳統(tǒng)RDBMS的差距。 Document-oriented storage Json格式的文檔存儲(chǔ)。用過ajax的朋友都知道Json長(zhǎng)啥樣{"key","value"}
Full Index Support
和數(shù)據(jù)庫(kù)一樣,MongoDB也支持索引。
Replication & High Availability
MongoDB也良好的支持多臺(tái)Server之間的數(shù)據(jù)同步,保證一個(gè)掛掉還能繼續(xù)干活。
Auto-Sharding
自動(dòng)發(fā)現(xiàn)Server,負(fù)載均衡,避免單點(diǎn)故障。
Querying
豐富的基于document的查詢。后面我們會(huì)舉例介紹。
Fast In-Place Updates
會(huì)根據(jù)不同的情況進(jìn)行數(shù)據(jù)更新
Map/Reduce
靈活的聚集和數(shù)據(jù)處理。
GridFS
GirdFS是MongoDB的大文件存儲(chǔ)系統(tǒng),比如圖片、音頻、視頻。 呵呵,心動(dòng)不如行動(dòng),我們可以試試他的Try It Out,進(jìn)行命令行的操作。當(dāng)然,這不是C#。
下載MongoDB,自己使用版本無(wú)所謂,服務(wù)器使用如果處理大文件,就要用64bit的,因?yàn)?2的只能處理<2G的文件。 關(guān)于安裝,很多朋友的博文都有介紹,搜索一下就可以了,都是圖文并茂的。但是有一點(diǎn)我要提醒下,就是關(guān)于安裝成Windows 服務(wù),是有點(diǎn)問題的,起碼Windows 7是這樣,我們首先要建立一個(gè)log.txt,然后使用--logpath ="\"d:\mongodb\log.txt""--install來進(jìn)行安裝,然后去注冊(cè)表把此服務(wù)的值改成--dbpath="\"d:\mongodb\db\""--service。因?yàn)楹芏嗳说慕榻B不是用--install,這樣我是安裝不成功的。
C#客戶端
我們.NET自然要去使用C#來和MongoD服務(wù)進(jìn)行通信,幸好有社區(qū)的好心人寫了MongoDB的.NET Driver 。有三種,Mongodb-csharp、Simple-cshapr和NoRM(http://www.mongodb.org/display/DOCS/C+Sharp+Language+Center )。我就使用Mongodb-csharp(http://github.com/samus/mongodb-csharp),因?yàn)樗С諨ocument和Linq兩種方式。如果擔(dān)心Linq的性能問題可以使用document。 引用Mongodb-csharp的dll,我們就可以操作MongoDB了。下面是別人寫的簡(jiǎn)單的使用方法:
view source print?
01 var mongo = new Mongo();
03 // 打開myorders數(shù)據(jù)庫(kù).
04 Database db = mongo.GetDatabase( "myorders" );
06 IMongoCollection orders = db.GetCollection( "orders" );
08 ???var order = new Document();
09 ???order["OrderAmount" ] = 57.22;
10 ???order["CustomerName" ] = "Elmer Fudd" ;
11 ???// Add the new order to the mongo orders colleciton.
12 ???orders.Insert( order );
14 ???// Create new orders.
15 ???var order1 = new Document();
16 ???order1["OrderAmount" ] = 100.23;
17 ???order1["CustomerName" ] = "Bugs Bunny" ;
18 ???var order2 = new Document();
19 ???order2["OrderAmount" ] = 0.01;
20 ???order2["CustomerName" ] = "Daffy Duck" ;
21 ???IEnumerable< Document > orderList = new List< Document > {order1, order2};
22 ???// Insert an IEnumerable.
23 ???orders.Insert( orderList );
25 ???var selector = new Document {{"CustomerName" , "Daffy Duck" }};
26 ???Document docToUpdate = orders.FindOne( selector );
27 ???Console.WriteLine( "Before Update: " + docToUpdate );
28 ???// I'm in the money!
29 ???docToUpdate["OrderAmount" ] = 1000000.00;
30 ???// Update Daffy's account before Hasaan finds him.
31 ???orders.Update( docToUpdate );
33 ???// Create a specification to query the orders collection.
34 ???var spec = new Document();
35 ???spec["CustomerName" ] = "Elmer Fudd" ;
37 ???Document result = orders.FindOne( spec )
39 ???// Query the orders collection.
40 ???IQueryable<Document> results =
41 ?????from doc in orders.AsQueryable()
42 ?????where doc.Key("CustomerName" ) == "Elmer Fudd"
44 ???Document result = results.FirstOrDefault();
46 ???// Delete documents matching a criteria.
47 ???orders.Delete( new Document {{"CustomerName" , "Elmer Fudd" }} );
48 ???Console.WriteLine( string .Format( "Document Count After Deleting Elmer Fudd: [ {0} ]" , orders.Count() ) );
50 ???orders.Delete( new Document() );
如果向像SqlServer那樣查看數(shù)據(jù)庫(kù)的數(shù)據(jù),目前也有很多客戶端支持,MongoVUE不錯(cuò),我用過。我想大家可以試著自己寫哥客戶端:)
當(dāng)我們查看具體集合的時(shí)候發(fā)現(xiàn)一個(gè)問題,就是MongoDB會(huì)自動(dòng)增加一個(gè)_id字段,其值長(zhǎng)的很像Guid,默認(rèn)為索引字段。如果我們要自定義這個(gè)字段的話,在設(shè)計(jì)實(shí)體類時(shí),在“主鍵”字段上增加一個(gè)屬性[MongoId]即可。
在設(shè)計(jì)實(shí)體類時(shí),字段也不能用于偏僻的類型,比如XElement,在讀的時(shí)候Mongodb-csharp反序列化會(huì)拋出異常,所以建議使用string來代替。如果不愛使用document,喜歡linq查詢,存儲(chǔ)的時(shí)候如果某個(gè)集合存儲(chǔ)某個(gè)類型的各種子類,在GetCollection<T>的時(shí)候也不能完成正確子類的反序列化,這些問題大家在使用的過程中會(huì)慢慢發(fā)現(xiàn),也可以郵件訂閱Mongodb-csharp的google group(發(fā)送空郵件到mongodb-csharp@googlegroups.com)。
總結(jié)
以上是生活随笔 為你收集整理的【转载】MongoDB基本操作 的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。