mongodb的save和insert函数的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mongodb的save和insert函数的区别相关的知识,希望对你有一定的参考价值。

参考技术A

                       

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函数的区别的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB save()方法和insert()方法的区别

mongodb学习2---常用命令解析

java中insert()方法和save()的区别

MongoDB之文档的增删改查

hibernate的save方法与sql的insert的区别

MongoDB数据库文档操作