mongodb的save和insert函數的區別

來源:互聯網
上載者:User

標籤:style   http   io   color   ar   os   使用   sp   for   

mongodb的save和insert函數都可以向collection裡插入資料,但兩者是有兩個區別:

一、使用save函數裡,如果原來的對象不存在,那他們都可以向collection裡插入資料,如果已經存在,save會調用update更新裡面的記錄,而insert則會忽略操作

二、insert可以一次性插入一個列表,而不用遍曆,效率高, save則需要遍曆列表,一個個插入。

看下這兩個函數的原型就清楚了,直接輸入函數名便可以查看原型,下面標紅的部分就是實現了迴圈,對於遠程調用來說,是一性次將整個列表post過來讓mongodb去自己處理,效率會高些

> db.user.insert
function (obj, _allow_dot) {
    if (!obj) {
        throw "no object passed to insert!";
    }
    if (!_allow_dot) {
        this._validateForStorage(obj);
    }
    if (typeof obj._id == "undefined" && !Array.isArray(obj)) {
        var tmp = obj;
        obj = {_id:new ObjectId};
        for (var key in tmp) {
            obj[key] = tmp[key];
        }
    }
    this._db._initExtraInfo();
    this._mongo.insert(this._fullName, obj);
    this._lastID = obj._id;
    this._db._getExtraInfo("Inserted");
}
> db.user.save
function (obj) {
    if (obj == null || typeof obj == "undefined") {
        throw "can‘t save a null";
    }
    if (typeof obj == "number" || typeof obj == "string") {
        throw "can‘t save a number or string";
    }
    if (typeof obj._id == "undefined") {
        obj._id = new ObjectId;
        return this.insert(obj);
    } else {
        return this.update({_id:obj._id}, obj, true);
    }
}



下面是 python裡的實現向mongo插入資料的代碼


import pymong

logItems =[]

logItems.append({"url":http://ww1.site.com/","time":0.2})

logItems.append({"url":http://ww2.site.com/","time":0.12})

logItems.append({"url":http://ww3.site.com/","time":0.24})

def addLogToMongo(db,logItems):
     #建立一個到mongo資料庫的串連
     con = pymongo.MongoClient(db,27017)
     #串連到指定資料庫
     db = con.my_collection    

     #直接插入資料,logItems是一個列表變數,可以使用insert直接一次性向mongoDB插入整下列表,如果用save的話,需一使用for來迴圈一個個插入,效率不高
     db.logDetail.insert(logItems)
     ‘‘‘
      for url in logItems:
          print(str(url))
          db.logDetail.save(url)
     ‘‘‘

mongodb的save和insert函數的區別

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.