独特的指数不那么独特

时间:2013-12-26 03:29:18

标签: node.js mongodb node-mongodb-native

我正在尝试故意创建并尝试在MongoDB上的唯一索引上编写副本以进行测试。我的代码基本上是:

db.collection("foo").ensureIndex({a: 1}, {unique: true}, function () {
    db.collection("foo").insert({a: "foo"}, function () {
        db.collection("foo").insert({a: "foo"});
    });
});

然而,这不会以任何方式失败。如果我连接到我的数据库并运行db.foo.find({a: "foo"}),我会在运行后找到两个结果。这表明{unique: true}无法正常工作/没有做任何事情等等。

使用createIndex也不起作用。

我是否错误地使用了MongoDB唯一索引?

2 个答案:

答案 0 :(得分:2)

您正在正确创建索引,但未正确响应从数据库发送的潜在错误。

当您使用NodeJS时,您需要检查回调的第一个参数以检查错误(大多数带有回调的NodeJS API都遵循此模式,MongoDB NodeJS Native驱动程序也是如此):

db.collection("foo").ensureIndex({a: 1}, {unique: true}, function (err) {
    if(err) { console.log('failed to create index: ', err); return; }
    db.collection("foo").insert({a: "foo"}, function (err) {
          if(err) { console.log('first insert failed: ', err); return; }
          db.collection("foo").insert({a: "foo"}, function (err) {
              if(err) { 
                   console.log('insert failed:', err); 
                   return;  
              }
        });
    });
});

答案 1 :(得分:0)

在我尝试使用我的mongo后,我担心代码很有用。并且在保证索引之后记录将是唯一的。您可以检查mongo版本或在回调中设置错误以查找任何语法错误。