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