Wetts's blog

Stay Hungry, Stay Foolish.

0%

MongoDB-命令-save和insert函数

转自:https://my.oschina.net/u/1590519/blog/342765

当主键”_id“不存在时,都是添加一个新的文档,但主健”_id“存在时,就有些不同了。

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

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

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

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

insert

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
> 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");
}

save

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
> 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);
}
}