mongodb的save和insert函数的区别
-
前言:
在mongodb中,save和insert函数都能向collection里面插入数据,但插入数据时两者还是有一定的区别的。一、两者区别:
使用insert函数,如果插入的集合的“_id”值,在集合中已经存在,用Insert执行插入操作会报异常:已经存在"_id"的键。用Save函数的话,如果系统中没有相同的"_id"就执行插入操作,有的话就执行覆盖掉原来的值。
当我们使用外部应用调用 这个两个函数时:insert可以一次性插入一个列表,而不用遍历,效率高,因为insert函数内部已经实现循环, 而使用save函数的话,则需要外面应用程序遍历列表,一个个插入。所以对于远程调用来说,一次性将整个列表传送给mongodb,让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>>>log_test =[ ]
>>>log_test.append({“name”:"epyth",”time”:0.2})
>>>log_test.append({“name”:"omiga",”time”:0.12})
>>>log_test.append({“name”:"theta",”time”:0.24})
>>>def addLogToMongo(db,log_test):
#建立一个到mongo数据库的连接
>>>con = pymongo.MongoClient(db,27017)#连接到指定数据库
>>>db = con.my_collection#直接插入数据,log_test是一个列表变量,可以使用insert直接一次性向mongoDB插入整下列表,如果用save的话,需一使用for来循环一个个插入,效率不高
使用insert函数:
>>>db.logDetail.insert(log_test)使用save函数:
>>>for name in log_test:>>>print(str(name))
>>>db.logDetail.save(name)