话题 首页 > MongoDB 教程 > MongoDB 教程话题列表 > 详情

mongodb的save和insert函数的区别

精华
如此轻盈 2016-09-20 10:17:22 浏览(4164) 回复(5) 赞(0)
mongodb的save和insert函数的区别是什么呢?是什么呢?是什么呢?
mongodb

回答(5)

如此轻盈 2016-09-20

mongodb的save和insert函数都可以向collection里插入数据,但两者是有两个区别:

一、使用save函数里,如果原来的对象不存在,那他们都可以向collection里插入数据,如果已经存在,save会调用update更新里面的记录,而insert则会忽略操作

二、insert可以一次性插入一个列表,而不用遍历,效率高, save则需要遍历列表,一个个插入。

看下这两个函数的原型就清楚了,直接输入函数名便可以查看原型,下面标红的部分就是实现了循环,对于远程调用来说,是一性次将整个列表post过来让mongodb去自己处理,效率会高些

db.user.insertfunction (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.savefunction (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)
 '''
一笔荒芜 2018-05-31

大神在哪里呀,大神在哪里呀,大神在哪里呀.

1144100656 2018-05-31

留名留名!!!,同样的问题,看看咋结局!!!

1152696398 2018-05-31

这个问题我也不清楚,等大佬来解决吧。。

要回复,请先登录 或者注册