Mongodb重复错误

时间:2016-02-17 15:19:54

标签: node.js mongodb

  db.collection("resource").update({name: name}, {
      name: name,
      type: type
  }, {
      upsert: true
    }

我按名字区分文件。如果文档存在相同,我不添加文档。但我想通过说“它已经存在,操作失败”来警告用户我该如何实现它?

1 个答案:

答案 0 :(得分:0)

听起来您想要插入文档,而不是更新或插入文档。

1:提前在resource.name添加唯一索引。

db.resouces.createIndex({ name: 1 }, { unique: true })

重要提示:请执行一次,而不是每次请求。

mongodb create index docs

2:使用insert代替update + upsert

听起来你想要实际insert一个文档,如果有一个重复的密钥就会出错。

db.resources.insert({ name: "AJ" })  // ok
db.resources.insert({ name: "AJ" })  // error!

第二次插入时会出现重复键错误。错误代码11000

请参阅mongodb docs on insert

3:在javascript中使用promise-try-catch。

执行错误检查的代码如下所示:

var db = require("mongojs")(DATABASE_URL, [ "resources" ])

var duplicateKey = function (err) {
  return err.code == "11000"
}

db.resources.insert({ name: name })
  .then(function () {
    // success!
  })
  .catch(duplicateKey, function () {
    // sorry! name is taken
  })