mongodb的save和insert函數的區別

mongodb的save和insert函數均可以向collection裏插入數據,但二者是有兩個區別:python

1、使用save函數裏,若是原來的對象不存在,那他們均可以向collection裏插入數據,若是已經存在,save會調用update更新裏面的記錄,而insert則會忽略操做mongodb

2、insert能夠一次性插入一個列表,而不用遍歷,效率高, save則須要遍歷列表,一個個插入。數據庫

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

> 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插入數據的代碼post


import pymongthis

logItems =[]url

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

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)     '''

相關文章
相關標籤/搜索