午夜国产狂喷潮在线观看|国产AⅤ精品一区二区久久|中文字幕AV中文字幕|国产看片高清在线

    說(shuō)說(shuō)MongoDB的插入原理
    來(lái)源:易賢網(wǎng) 閱讀:1177 次 日期:2015-09-08 17:23:09
    溫馨提示:易賢網(wǎng)小編為您整理了“說(shuō)說(shuō)MongoDB的插入原理”,方便廣大網(wǎng)友查閱!

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

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

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

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

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

    > var time = new Date("2011/8/28 21:50:00") //定義一個(gè)時(shí)間對(duì)象

    > var i = {"time":time,"userid":10001,"sessionid":"20110829215100","ip":"192.168.0.1","title":"Login","url":"Login.aspx"} //定義一個(gè)文檔對(duì)象

    > i //查看 i 文檔

    {

    "time" : ISODate("2011-08-28T13:50:00Z"),

    "userid" : 10001,

    "sessionid" : "20110829215100",

    "ip" : "192.168.0.1",

    "title" : "Login",

    "url" : "Login.aspx"

    }

    > use testDb

    > show collections //查看當(dāng)前集合,把i文檔插入到login集合中

    myc

    myc1

    myc2

    system.indexes

    > db.login.insert(i)

    > db.login.findOne()

    {

    "_id" : ObjectId("4e5b99e62690d28cadd0f58d"), //MongoDb會(huì)為每個(gè)插入的對(duì)象自動(dòng)生成一個(gè)"_id"的值,你可以在插入的時(shí)候自己指定這個(gè)值,如下面

    "time" : ISODate("2011-08-28T13:50:00Z"),

    "userid" : 10001,

    "sessionid" : "20110829215100",

    "ip" : "192.168.0.1",

    "title" : "Login",

    "url" : "Login.aspx"

    }

    > i = {"_id":"newid_100001","time":time,"userid":10001,"sessionid":"20110829215100","ip":"192.168.0.1","title":"Login","url":"Login.aspx"}

    {

    "_id" : "newid_100001",

    "time" : ISODate("2011-08-28T13:50:00Z"),

    "userid" : 10001,

    "sessionid" : "20110829215100",

    "ip" : "192.168.0.1",

    "title" : "Login",

    "url" : "Login.aspx"

    }

    > db.login.save(i) //這里用save插入文檔到數(shù)據(jù)庫(kù)

    > db.login.find() //查詢結(jié)果兩條文檔,第二條文檔"_id"是自定義的值

    { "_id" : ObjectId("4e5b99e62690d28cadd0f58d"), "time" : ISODate("2011-08-28T13:50:00Z"), "userid" : 10001, "sessionid" : "20110829215100",

    "ip" : "192.168.0.1", "title" : "Login", "url" : "Login.aspx" }

    { "_id" : "newid_100001", "time" : ISODate("2011-08-28T13:50:00Z"), "userid" : 10001, "sessionid" : "20110829215100", "ip" : "192.168.0.1",

    "title" : "Login", "url" : "Login.aspx" }

    注意:

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

    下面說(shuō)下用C#驅(qū)動(dòng) 添加文檔。

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

    下面說(shuō)下用 C#驅(qū)動(dòng) 添加文檔

    #region Version Info

    /* ========================================================================

    * 【說(shuō)明描述】

    *

    * 作者:yoolo 時(shí)間:2011/8/29 21:15:38

    * 文件名:NoSpiderAuto.LoginDemo

    * 版本:V1.0.1

    *

    * 修改者: 時(shí)間:

    * 修改說(shuō)明:

    * ========================================================================

    */

    #endregion

    namespace NoSpiderAuto

    {

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Text;

    using MongoDB.Driver;

    using MongoDB.Bson;

    internal class LoginDemo

    {

    MongoDatabase db;

    MongoCollection coll;

    public LoginDemo()

    {

    MongoServerSettings set = new MongoServerSettings()

    {

    Server = new MongoServerAddress("127.0.0.1")

    };

    MongoServer server = new MongoServer(set);

    db = server.GetDatabase("testDb");

    coll = db.GetCollection("login");

    }

    /// <summary>

    /// 單個(gè)對(duì)象插入

    /// </summary>

    public void InsertLogin()

    {

    var Time = DateTime.Now.ToUniversalTime();

    //實(shí)例一 添加匿名對(duì)象

    var login = new { _id = "newid_100002", time = Time, userid = 10002, sessionid = "20110829215102", ip = "192.168.0.2", title = "注冊(cè)", url = "Register.aspx" };

    coll.Insert(login);//插入成功

    //添加一個(gè)BsonDocument對(duì)象

    BsonDocument doc = new BsonDocument();

    doc.Add("_id", BsonValue.Create("newid_100003"));

    doc.Add("time", BsonValue.Create(Time));

    doc.Add("userid", BsonValue.Create(10003));

    doc.Add("sessionid", BsonValue.Create("20110829215103"));

    doc.Add("ip", BsonValue.Create("192.168.0.3"));

    doc.Add("title", BsonValue.Create("注冊(cè)"));

    doc.Add("url", BsonValue.Create("Register.aspx"));

    coll.Insert(doc);//插入成功

    //添加一個(gè)對(duì)象

    Login man = new Login();

    man._id = "newid_100004";

    man.time = Time;

    man.userid = 10004;

    man.sessionid = "20110829215104";

    man.ip = "192.168.0.4";

    man.title = "注冊(cè)";

    man.url = "Register.aspx";

    coll.Insert(man);//插入成功

    }

    /// <summary>

    /// 批量插入

    /// </summary>

    public void InsertBatchLogin()

    {

    var Time = DateTime.Now.ToUniversalTime();

    List<Login> logins = new List<Login>();

    for (int i = 0; i < 100; i++)

    {

    Login man = new Login();

    man._id = "newid_100001" + i.ToString();//_id在批量插入的時(shí)候不能重復(fù),如果有一個(gè)重復(fù)全部集合無(wú)法插入到集合

    man.time = Time;

    man.userid = 10004 + i;

    man.sessionid = "20110829215104";

    man.ip = "192.168.0.4";

    man.title = "注冊(cè)";

    man.url = "Register.aspx";

    logins.Add(man);

    }

    coll.InsertBatch(typeof(Login), logins); //插入成功

    }

    }

    public class Login

    {

    public string _id { get; set; }

    public DateTime time { get; set; }

    public int userid { get; set; }

    public string sessionid { get; set; }

    public string ip { get; set; }

    public string title { get; set; }

    public string url { get; set; }

    }

    }

    如果要插入多個(gè)文檔,使用批量插入會(huì)快一些。一次批量插入只是單個(gè)Tcp請(qǐng)求,也就是避免了多個(gè)請(qǐng)求帶來(lái)的開(kāi)銷!

    更多信息請(qǐng)查看IT技術(shù)專欄

    更多信息請(qǐng)查看數(shù)據(jù)庫(kù)
    易賢網(wǎng)手機(jī)網(wǎng)站地址:說(shuō)說(shuō)MongoDB的插入原理
    由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

    2025國(guó)考·省考課程試聽(tīng)報(bào)名

    • 報(bào)班類型
    • 姓名
    • 手機(jī)號(hào)
    • 驗(yàn)證碼
    關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
    工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
    云南網(wǎng)警備案專用圖標(biāo)
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
    云南網(wǎng)警報(bào)警專用圖標(biāo)