日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
說說MongoDB的插入原理

在開發(fā)之前,選擇MongoDB驅(qū)動是件很重要的事情。如果選擇不好,在后期的開發(fā)的是件很費(fèi)力的事情,因?yàn)槲揖陀龅竭@樣的問題。MongoDB驅(qū)動有幾種比較流行驅(qū)動,官方驅(qū)動和samus是兩種使用比較多的。

好了,接著說今天的內(nèi)容了。

首先從MongoDB的官方網(wǎng)站上下載CSharp驅(qū)動(https://github.com/mongodb/mongo-csharp-driver/downloads)。我使用的是CSharpDriver-1.1.0.4184,里面還包含一個CSharpDriverDocs.chm的文檔。

MongoDB插入原理:使用驅(qū)動程序進(jìn)行插入的時(shí)候,會將數(shù)據(jù)轉(zhuǎn)換成BSON格式。數(shù)據(jù)庫會解析BSON,并檢驗(yàn)是否含有“_id”鍵,因?yàn)椤癬id”鍵在插入到數(shù)據(jù)庫時(shí)MongoDB會自動生成。而且每次插入文檔不能超過4M。這個應(yīng)該是和MongoDB本身有關(guān)。但是MongoDB1.8版本的支持16M,為什么是這個樣子我到?jīng)]怎么研究。這個想留給有心人幫忙解決下了。

插入的Shell操作有Insert和Save兩種語法,先看下面的Shell

 
 
 
  1. > var time = new Date("2011/8/28 21:50:00") //定義一個時(shí)間對象 
  2. > var i = {"time":time,"userid":10001,"sessionid":"20110829215100","ip":"192.168.0.1","title":"Login","url":"Login.aspx"}  //定義一個文檔對象 
  3. > i   //查看 i 文檔 
  4.         "time" : ISODate("2011-08-28T13:50:00Z"), 
  5.         "userid" : 10001, 
  6.         "sessionid" : "20110829215100", 
  7.         "ip" : "192.168.0.1", 
  8.         "title" : "Login", 
  9.         "url" : "Login.aspx" 
  10. > use testDb 
  11. > show collections  //查看當(dāng)前集合,把i文檔插入到login集合中 
  12. myc 
  13. myc1 
  14. myc2 
  15. system.indexes 
  16. > db.login.insert(i) 
  17. > db.login.findOne() 
  18.         "_id" : ObjectId("4e5b99e62690d28cadd0f58d"), //MongoDb會為每個插入的對象自動生成一個"_id"的值,你可以在插入的時(shí)候自己指定這個值,如下面 
  19.         "time" : ISODate("2011-08-28T13:50:00Z"), 
  20.         "userid" : 10001, 
  21.         "sessionid" : "20110829215100", 
  22.         "ip" : "192.168.0.1", 
  23.         "title" : "Login", 
  24.         "url" : "Login.aspx" 
  25. > i = {"_id":"newid_100001","time":time,"userid":10001,"sessionid":"20110829215100","ip":"192.168.0.1","title":"Login","url":"Login.aspx"} 
  26.         "_id" : "newid_100001", 
  27.         "time" : ISODate("2011-08-28T13:50:00Z"), 
  28.         "userid" : 10001, 
  29.         "sessionid" : "20110829215100", 
  30.         "ip" : "192.168.0.1", 
  31.         "title" : "Login", 
  32.         "url" : "Login.aspx" 
  33. > db.login.save(i) //這里用save插入文檔到數(shù)據(jù)庫 
  34. > db.login.find()  //查詢結(jié)果兩條文檔,第二條文檔"_id"是自定義的值 
  35. { "_id" : ObjectId("4e5b99e62690d28cadd0f58d"), "time" : ISODate("2011-08-28T13:50:00Z"), "userid" : 10001, "sessionid" : "20110829215100", 
  36. "ip" : "192.168.0.1", "title" : "Login", "url" : "Login.aspx" } 
  37. { "_id" : "newid_100001", "time" : ISODate("2011-08-28T13:50:00Z"), "userid" : 10001, "sessionid" : "20110829215100", "ip" : "192.168.0.1", 
  38. "title" : "Login", "url" : "Login.aspx" } 

注意:

1:Insert和Save的區(qū)別是:如果插入的集合的“_id”值,在集合中已經(jīng)存在,用Insert執(zhí)行插入操作回報(bào)異常,已經(jīng)存在"_id"的鍵。用Save如果系統(tǒng)中沒有相同的"_id"就執(zhí)行插入操作,有的話就執(zhí)行覆蓋掉原來的值。相當(dāng)于修改操作。我這里就不做演示了。

下面說下用C#驅(qū)動 添加文檔。

2:在新建一個集合或者一個數(shù)據(jù)庫時(shí),MongoDb不會在馬上生成。而是在你添加了第一個數(shù)據(jù)后才會有顯示。這個特性很多的數(shù)據(jù)庫都用,比如說SQLite。

下面說下用 C#驅(qū)動 添加文檔

 
 
 
  1. #region Version Info 
  2. /* ========================================================================  
  3.     * 【說明描述】  
  4.     *   
  5.     * 作者:yoolo        時(shí)間:2011/8/29 21:15:38  
  6.     * 文件名:NoSpiderAuto.LoginDemo 
  7.     * 版本:V1.0.1  
  8.     *  
  9.     * 修改者:           時(shí)間:                
  10.     * 修改說明:  
  11.     * ========================================================================  
  12.   */ 
  13. #endregion 
  14.  
  15. namespace NoSpiderAuto 
  16.     using System; 
  17.     using System.Collections.Generic; 
  18.     using System.Linq; 
  19.     using System.Text; 
  20.     using MongoDB.Driver; 
  21.     using MongoDB.Bson; 
  22.  
  23.     internal class LoginDemo 
  24.     { 
  25.         MongoDatabase db; 
  26.         MongoCollection coll; 
  27.         public LoginDemo() 
  28.         { 
  29.             MongoServerSettings set = new MongoServerSettings() 
  30.             { 
  31.                 Server = new MongoServerAddress("127.0.0.1") 
  32.             }; 
  33.             MongoServer server = new MongoServer(set); 
  34.             db = server.GetDatabase("testDb"); 
  35.             coll = db.GetCollection("login"); 
  36.         } 
  37.  
  38.         ///  
  39.         /// 單個對象插入 
  40.         ///  
  41.         public void InsertLogin() 
  42.         { 
  43.             var Time = DateTime.Now.ToUniversalTime(); 
  44.  
  45.             //實(shí)例一 添加匿名對象 
  46.             var login = new { _id = "newid_100002", time = Time, userid = 10002, sessionid = "20110829215102", ip = "192.168.0.2", title = "注冊", url = "Register.aspx" }; 
  47.             coll.Insert(login);//插入成功 
  48.  
  49.             //添加一個BsonDocument對象 
  50.             BsonDocument doc = new BsonDocument(); 
  51.             doc.Add("_id", BsonValue.Create("newid_100003")); 
  52.             doc.Add("time", BsonValue.Create(Time)); 
  53.             doc.Add("userid", BsonValue.Create(10003)); 
  54.             doc.Add("sessionid", BsonValue.Create("20110829215103")); 
  55.             doc.Add("ip", BsonValue.Create("192.168.0.3")); 
  56.             doc.Add("title", BsonValue.Create("注冊")); 
  57.             doc.Add("url", BsonValue.Create("Register.aspx")); 
  58.             coll.Insert(doc);//插入成功 
  59.  
  60.             //添加一個對象 
  61.             Login man = new Login(); 
  62.             man._id = "newid_100004"; 
  63.             man.time = Time; 
  64.             man.userid = 10004; 
  65.             man.sessionid = "20110829215104"; 
  66.             man.ip = "192.168.0.4"; 
  67.             man.title = "注冊"; 
  68.             man.url = "Register.aspx"; 
  69.             coll.Insert(man);//插入成功 
  70.  
  71.         } 
  72.         ///  
  73.         /// 批量插入 
  74.         ///  
  75.         public void InsertBatchLogin() 
  76.         { 
  77.             var Time = DateTime.Now.ToUniversalTime(); 
  78.             List logins = new List(); 
  79.  
  80.             for (int i = 0; i < 100; i++) 
  81.             { 
  82.                 Login man = new Login(); 
  83.                 man._id = "newid_100001" + i.ToString();//_id在批量插入的時(shí)候不能重復(fù),如果有一個重復(fù)全部集合無法插入到集合 
  84.                 man.time = Time; 
  85.                 man.userid = 10004 + i; 
  86.                 man.sessionid = "20110829215104"; 
  87.                 man.ip = "192.168.0.4"; 
  88.                 man.title = "注冊"; 
  89.                 man.url = "Register.aspx"; 
  90.                 logins.Add(man); 
  91.             } 
  92.             coll.InsertBatch(typeof(Login), logins); //插入成功 
  93.         } 
  94.     } 
  95.  
  96.     public class Login 
  97.     { 
  98.         public string _id { get; set; } 
  99.         public DateTime time { get; set; } 
  100.         public int userid { get; set; } 
  101.         public string sessionid { get; set; } 
  102.         public string ip { get; set; } 
  103.         public string title { get; set; } 
  104.         public string url { get; set; } 
  105.     } 

如果要插入多個文檔,使用批量插入會快一些。一次批量插入只是單個Tcp請求,也就是避免了多個請求帶來的開銷!


網(wǎng)站欄目:說說MongoDB的插入原理
URL地址:http://www.dlmjj.cn/article/dhpgeog.html