问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

mongodb的save和insert函数的区别

发布网友 发布时间:2022-04-08 07:28

我来回答

2个回答

热心网友 时间:2022-04-08 08:57

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

热心网友 时间:2022-04-08 10:15

一、使用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);
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
vivo y18l 死机卡在开机界面 vivoy18l手机频繁黑屏死机怎么办? vivo y18l 死机了怎么办 vivoY18l黑屏死机解决办法 vivo y18l刷机很久都开不了机怎么? 湖北自考专升本会有学籍吗? 湖北自考专升本后可以考研吗 湖北自考申请毕业证的时间在什么时候 湖北自考专升本学历怎么查询 湖北自考专升本为什么没有学籍 如何查询身份证下有几个微信并解除 m35b秦歌收音机的拆卸方法 如何注销实名认证 中夏牌zx2050b收音机组装完后用电烙铁触摸后面电路板才有轻微声怎样解决 收音机BTOCKED怎么取消掉 如何注销实名认证 货车J6b收音机怎样于手机连接? 手机、收音机、电视机三种常用电器中,既能接收电磁波、又能发射电磁波... 收音机的磁棒线圈 b线断了怎么办 微信怎么查多少个号绑定多少个银行卡?与注销功能在哪查? 收音机br5是什么意思 熊猫B737A 收音机用什么电源?适配器还是电池? TCL电视,万能遥控器被锁,数字键能用,就是节目加减只能调两个台.我要怎么解锁, 微信被盗了,密码改了,手机号也改成他人的,是我实名认证的,我想把它给注销了,怎么注销啊?_百度问一问 辣血红龙鱼与辣椒红龙鱼有哪些不同之处? tcl电视遥控器改ip地址时怎么切换到数字键盘 红龙鱼有几种,红龙鱼种类大全 tcl电视遥控没有ok键要怎么用 数字电视遥控器怎么和TCL网络电视遥控器开关键对接?tcl遥控器找不到设置键 红龙鱼血麒麟鱼苗多少钱 低首付分期贷款刚提的新车可以做车贷吗? 我的车是分期买的,拿行车证架驶证和保险可以贷款吗? 分期付款买车,刚买的车能直接贷款吗 求解:分期付款买的车,还能用来贷款吗? 一级建造师考试成绩全国是统一公布的吗? 一级建造师的分数什么时候下来 我忘记iPhone锁屏密码了,然后这个时候有人给我发微信,我解不开密码手 陶瓷杯子是用什么泥做的? 变色杯能不能用普通的白色陶瓷杯子制作 如何注册云上政工? 人力云助手怎么收不到电子合同短信验证码 云系统手机用数据线接电脑只能连接自带的手机软件,其他助手类软件读取不到什么原因 企云助手为什么登录不了 情人节北京有什么玩的吗? 素描的狼怎么画? GWG-1000怎么调时间? 怎样画素描狼 在北京七夕节去哪里玩 如何更简单的画狼的素描,而且看上去不是很难看就行了。要简单哦! 我买了一块卡西欧G-shock手表,型号是G-1000型,怎么调整时间啊?我按A键3秒没声音,C键3秒没声音