MongoDB用id 1替换整个Doc

时间:2017-08-26 14:01:35

标签: mongodb

阙。替换_id为1的整个文档。

  

db.emp.save({_ id:1})

是对还是不对?

2 个答案:

答案 0 :(得分:1)

让我们跳转到shell,看看save方法

> db.test.save
function (obj, opts) {
    if (obj == null)
        throw Error("can't save a null");

    if (typeof(obj) == "number" || typeof(obj) == "string")
        throw Error("can't save a number or string");

    if (typeof(obj._id) == "undefined") {
        obj._id = new ObjectId();
        return this.insert(obj, opts);
    } else {
        return this.update({_id: obj._id}, obj, Object.merge({upsert: true}, opts));
    }
}
>

现在,如果我们将逻辑分解为简单的步骤。

对象

上不存在_id
  • 创建新的ObjectId
  • 将字段附加到对象
  • 使用传入保存的选项
  • 调用集合insert

_id存在于对象

  • 将我们传入的选项与{upsert: true}合并,以便选择{a: 1, b: 2 } + {upsert: true}{a: 1, b: 2, upsert: true }
  • 使用合并选项调用集合的更新,并查询对象_id

答案 1 :(得分:0)

你可能正在寻找mongodb的replaceOne方法。它可以用作:

db.restaurant.replaceOne(
      { "_id" : "1", "somfield" : "Old value" },
      { "_id" : "1", "somfield" : "New value", "additional" : "addedField" }
   );

注意 - 第一个参数,如果要替换的文档的过滤器,第二个参数是将替换它的文档。