標籤: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函數的區別