2016-02-17 44 views
0
db.collection("resource").update({name: name}, { 
     name: name, 
     type: type 
    }, { 
     upsert: true 
    } 

我通过名称区分文档。如果存在相同的文件,我不添加文件。但是我想提醒用户说“它已经存在,操作失败”我该如何实现它?Mongodb重复错误发生器

回答

0

这听起来像你想插入文件,不更新或插入文件。

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

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

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

请参阅mongodb create index docs。使用insert而不是update + upsert

听起来好像你想要的文件实际上是insert,并且如果有重复的密钥会得到一个错误。

​​

您将获得第二个插入重复键错误。错误代码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 
    }) 
+0

我知道,第二行会抛出一个错误,但我该如何处理错误?我想警告用户说“它已经存在,操作失败” – user3836430

+0

你必须检查应用程序代码。 – AJcodez