Collection.upsert()vs Collection.update()with“upsert:true”

时间:2016-01-04 04:27:28

标签: mongodb meteor

我在Meteor中使用MongoDB。我发现要更新(,如果已经存在),数据或集合update()中的插入可以与upsert: true一起使用。还有一个名为upsert()的方法,它也可用于更新/插入记录。

代码: (来自Meteor)

使用update

Collection.update({
    _id: id
}, {
    $set: {
        content: 'SomeText'
    }
}, {
    upsert: true
});

使用upsert

Collection.upsert({
    _id: id
}, {
    $set: {
        content: 'SomeText'
    }
});

问题:

  1. 差异update() upsert标记设置为trueupsert()
  2. 之间有何区别
  3. 使用案例:何时应使用update()upsert()

2 个答案:

答案 0 :(得分:7)

以下是来自流星源(https://github.com/meteor/meteor/blob/devel/packages/mongo/collection.js#L640

的mongo代码
Mongo.Collection.prototype.upsert = function upsert(
    selector, modifier, options, callback) {
  if (! callback && typeof options === "function") {
    callback = options;
    options = {};
  }

  const updateOptions = _.extend({}, options, {
    _returnObject: true,
    upsert: true
  });

  return this.update(selector, modifier, updateOptions, callback);
};

所以upsert只是update的一个简写,其中upsert选项设置为true。 没有什么不同,你可以使用你喜欢的任何功能

答案 1 :(得分:-2)

后一个upsert是javascript shell bulk operation的一个组件。我确定它没有被任何司机曝光到目前为止。