mongodb的save和insert函数的区别

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

时间: 2024-10-10 07:42:13

mongodb的save和insert函数的区别的相关文章

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

MongoDB save()方法和insert()方法的区别 首先看官方文档怎么说的 Updates an existing document or inserts a new document, depending on its document parameter save方法有更新和插入两种功能,到底是插入还是更新文档取决于save的参数.那么到底是依赖于哪个参数呢?继续看 If the document does not contain an _id field, then the sa

存储过程和自定义函数的区别

1: 1)存储过程,功能强大,可以执行包括修改表等一系列数据库操作,也可以创建为 SQL Server 启动时自动运行的存储过程. 自定义函数,用户定义函数不能用于执行一组修改全局数据库状态的操作. 2)存储过程,可以使用非确定函数. 自定义函数,不允许在用户定义函数主体中内置非确定函数. 3)存储过程,主要是返回一个int状态结果,也可返回记录集. 自定义函数,可以返回表变量. 关于这个,很容易糊涂.存储过程,可以使用这样的形式来返回N多的结果: create procedure sp1  a

SQL四个排名函数的区别

/* 四个排名函数的区别: RANK() 返回结果集的分区内每行的排名.行的排名是相关行之前的排名数加一. 如果两个或多个行与一个排名关联,则每个关联行将得到相同的排名. DENSE_RANK() 返回结果集分区中行的排名,在排名中没有任何间断.行的排名等于所讨论行之前的所有排名数加一. 如果有两个或多个行受同一个分区中排名的约束,则每个约束行将接收相同的排名. ROW_NUMBER() 返回结果集分区内行的序列号,每个分区的第一行从开始. ORDER BY子句可确定在特定分区中为行分配唯一RO

JQuery之JQuery的版本 JQuery入门 属性获取 JQuery就绪函数 JS文档就绪函数和JQuery文档就绪函数的区别 JS对象和JQuery对象的区别 关于$的使用 多个JS库的冲突解决方案

JQuery的版本 JQuery入门 属性获取 JQuery就绪函数 JS文档就绪函数和JQuery文档就绪函数的区别 JS对象和JQuery对象的区别 关于$的使用 多个JS库的冲突解决方案 JQuery的版本 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>jQuery的版本</title> <

PHP strcmp,strnatcmp,strncmp函数的区别

字符串比较说明当s1<s2时,返回为负数当s1=s2时,返回值= 0当s1>s2时,返回正数 1 <?php 2 $str1 = 'str100'; 3 $str2 = 'str20'; 4 echo strcmp($str1, $str2)."<br>"; 5 //输出-1 6 echo strnatcmp($str1, $str2)."<br>"; 7 //输出1 8 echo strncmp($str1, $str2,

hibernate session.save()和session.persist()的区别

save()需要返回一个Serialzable的实现类,因此执行这个方法时会马上插入到数据库 而persist()不会立即插入到数据库. "当我们封装一个长会话流程的时候,persist()方法就显得尤为重要了!" 记录下来,防止自己再一次忘记 hibernate session.save()和session.persist()的区别,码迷,mamicode.com

C++ sizeof操作符的用法和strlen函数的区别

摘要:本人首先介绍了C++中sizeof操作符的用法和注意事项,其次对比了和strlen的区别和使用,方便大家在写代码的时候查阅,和面试.笔试的时候复习. 目录: sizeof的用法: sizeof和strlen的区别: sizeof的用法: sizeof 是一种单目操作符,而不是函数.sizeof以字节形式给出操作数的存储空间. 操作数可以是一个表达式或在括号内的类型名.操作数的存储空间由操作数的类型决定. char str[]="hello"; char str1[100]; ch

jQuery height()、innerHeight()、outerHeight()函数的区别详解

jQuery height().innerHeight().outerHeight()函数的区别详解 在jQuery中,获取元素高度的函数有3个,它们分别是height(). innerHeight().outerHeight(). 与此相对应的是,获取元素宽度的函数也有3个,它们分别是width(). innerWidth().outerWidth(). 在这里,我们以height().innerHeight().outerHeight()3个函数为例,来详细介绍它们之间的区别. 下面我们以元

append()函数与html()函数的区别

append()函数与html()函数的区别:其实这两个函数的区别是蛮大的,比如append()函数可以向指定元素尾部追加元素对象,而html()函数就不可以.他们两者最为相似的功能,就是为指定元素设置html内容的时候.代码实例如下: <!DOCTYPE html><html> <head> <meta charset=" utf-8"> <meta name="author" content="ht