db.collection("resource").update({name: name}, {
name: name,
type: type
}, {
upsert: true
}
我按名字区分文件。如果文档存在相同,我不添加文档。但我想通过说“它已经存在,操作失败”来警告用户我该如何实现它?
答案 0 :(得分:0)
听起来您想要插入文档,而不是更新或插入文档。
1:提前在resource.name
添加唯一索引。
db.resouces.createIndex({ name: 1 }, { unique: true })
重要提示:请执行一次,而不是每次请求。
2:使用insert
代替update + upsert
。
听起来你想要实际insert
一个文档,如果有一个重复的密钥就会出错。
db.resources.insert({ name: "AJ" }) // ok
db.resources.insert({ name: "AJ" }) // error!
第二次插入时会出现重复键错误。错误代码11000
。
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
})